我正在努力在 C++ 中实现反射机制。 我的代码中的所有对象都是 Object(我自己的泛型类型)的子类,其中包含 Class 类型的静态成员数据。
class Class{
public:
Class(const std::string &n, Object *(*c)());
protected:
std::string name; // Name for subclass
Object *(*create)(); // Pointer to creation function for subclass
};
对于具有静态类成员数据的 Object 的任何子类,我希望能够使用指向该子类的构造函数的指针来初始化“create”。
最佳答案
不能取构造函数的地址(C++98 Standard 12.1/12 Constructors - “12.1-12 Constructors - “不得取构造函数的地址。”)
最好的办法是有一个工厂函数/方法来创建 Object
并传递工厂的地址:
class Object;
class Class{
public:
Class(const std::string &n, Object *(*c)()) : name(n), create(c) {};
protected:
std::string name; // Name for subclass
Object *(*create)(); // Pointer to creation function for subclass
};
class Object {};
Object* ObjectFactory()
{
return new Object;
}
int main(int argc, char**argv)
{
Class foo( "myFoo", ObjectFactory);
return 0;
}
关于c++ - 如何传递指向构造函数的函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954548/