Ich möchte sicherstellen, dass nur intelligente Zeiger aus meinen Klassen erstellt werden, so dass ich alle Konstruktoren geschützt habe.Stellen Sie sicher, dass nur Smartpointers erstellt werden
Um Objekte zu erstellen i bauen dieses „Unbebaubares“ -Politik:
template <typename T>
class Buildable
{
public:
template<typename ...Args>
static QSharedPointer<T> buildObject(Args&&... all)
{
return QSharedPointer<T>(new T(std::forward<Args>(all)...));
}
};
Wenn ich das diese Politik in einer Basisklasse zu verwenden, alles gut geht. Aber wenn ich es in der Basis verwenden und eine abgeleitete Klasse wie folgt aus:
class A : public Buildable<A> {}
class B : A, public Buildable<B>{}
die Compiler argumentiert: Fehler: Mitglied ‚buildObject‘ gefunden in mehreren Basisklassen verschiedenen Typen
Ich wissen nicht, wie um dieses Problem zu lösen. Irgendwelche Ideen?
Wenn Ihr Konstruktor ist 'private',' Klasse B: A, ..' kann nicht kompilieren 'A' zu konstruieren. Wenn es geschützt ist, braucht 'B' nicht länger smartPointer zu benutzen, und so ist A (geerbt) nicht in einem smartPointer ... – Jarod42
Gibt es irgendeine Chance, etwas zu bauen, was ich will? um die Verwendung intelligenter Zeiger zu erzwingen? –