Lieferant ist eine Funktion ohne Argumente und eine Art Rückkehr: Sie können darstellen, dass mit std::function:
#include <iostream>
#include <functional>
#include <memory>
// the class Employee with a "print" operator
class Employee
{
friend std::ostream& operator<<(std::ostream& os, const Employee& e);
};
std::ostream& operator<<(std::ostream& os, const Employee& e)
{
os << "A EMPLOYEE";
return os;
}
// maker take the supplier as argument through std::function
Employee maker(std::function<Employee(void)> fx)
{
return fx();
}
// usage
int main()
{
std::cout << maker(
[]() { return Employee(); }
// I use a lambda here, I could have used function, functor, method...
);
return 0;
}
ich nicht hier Zeiger verwendet haben noch der Betreiber neue Mitarbeiter zuweisen: Wenn Sie verwenden möchten,
std::unique_ptr<Employee> maker(std::function<std::unique_ptr<Employee>(void)> fx)
{
return fx();
}
// ...
maker(
[]()
{
return std::make_unique<Employee>();
}
);
Hinweis: es sollten Sie Zeiger wie std::unique_ptr verwaltet betrachten den Anruf an Operator < < dann geändert werden sollte, weil Hersteller einen Zeiger anstelle eines Objekts zurück.
Ofc Lieferant ist eine Schnittstelle bedeutet durch Übergabe nach Wert wird das Implementierungsobjekt schneiden, besser, es als Referenz zu übergeben, wenn die abgeleitete Klasse die Get implementiert. –
@TheSombreroKid Thnx, behoben. – Nikita