如果我正確理解你的問題,那麼你必須添加靜態創建的每一個類:
class A
{
public:
//to create
static A* create(int param) { return new A(param); }
};
和那麼這樣做:
A* ptr = A::create(4);
或更好,避免了內存泄漏
std::unique_ptr<A> uptr(A::create(4));
或者,如果你的問題是做一個「聰明」的basic_class任何構造函數創建,然後做在C++ 11:
template <class T>
class base_class
{
public:
template<typename... Params>
static T* construct(Params&&... parameters) { return new T(std::forward<Params>(parameters)...); }
};
class A : public base_class<A>
{
public:
A(const std::string& s) {}
A(int i) {}
};
等
A::create(std::string("Hey"));
A::create(5);
現在
都工作。
編輯:基類定義了「結構」方法。所以上面的應該是
A::construct(std::string("Hey"));
A::construct(5);
爲什麼你要做到這一點,而無需使用模板? –
我認爲我們需要更好地理解「從這堂課」到底是什麼意思。在編譯時,這個類已經在那裏了。在運行時,沒有類對象(與Java相反)。 –