c++ - 如何传递指向构造函数的函数指针?

标签 c++ reflection constructor function-pointers

我正在努力在 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/

相关文章:

c++ - 为什么while循环不需要用户在c++中输入

iPhone + JSON + 反射

Java 反射 'NoClassDef' 错误

c++ - C++ 标准中是否有任何计划来解决初始化列表构造函数的不一致问题?

c++ - 我需要一个具有多个值的键。你会推荐什么数据结构?

c++ - 初始化并传递数组

javascript - Angular Promise 回调不在构造函数方法内触发,而是在对象字面量方法中触发

c++ - 如何将数组传递给构造函数?

c++ - 防止直接访问 std::map 键

css - 图像反射不应有阴影