【发布时间】:2016-03-23 21:57:39
【问题描述】:
我想确保只有智能指针是从我的类中构建的,所以我保护了所有构造函数。
为了创建对象,我构建了这个“可构建”-策略:
template <typename T>
class Buildable
{
public:
template<typename ...Args>
static QSharedPointer<T> buildObject(Args&&... all)
{
return QSharedPointer<T>( new T(std::forward<Args>(all)...) );
}
};
如果我在基类中使用此策略,一切顺利。 但是当我在基类和派生类中使用它时:
class A : public Buildable<A> {}
class B : A, public Buildable<B>{}
编译器认为:错误:在多个不同类型的基类中发现成员“buildObject”
我不知道如何解决这个问题。有什么想法吗?
【问题讨论】:
-
如果你的构造函数是
private,class B : A, ..不能编译构造A。如果它受到保护,B不再需要使用 smartPointer,因此 A(继承的)不在 smartPointer 中... -
有机会构建我想要的东西吗?强制使用智能指针?