Make sure only Smartpointers are build

Viewed 188

I want to make sure only smart pointers are build from my classes so i made all constructors protected.

To create objects i build this "Buildable"-Policy:

template <typename T>
class Buildable
{
public:
    template<typename ...Args>
    static QSharedPointer<T> buildObject(Args&&... all) 
{
        return QSharedPointer<T>( new T(std::forward<Args>(all)...) );
}

};

If i use this this policy in a base class, all goes well. But when i use it in base and a derived class like this:

class A : public Buildable<A> {}
class B : A, public Buildable<B>{}

the compiler argues: Error: member 'buildObject' found in multiple base classes of different types

I don't know how to solve this problem. Any ideas?

3 Answers
Related