C++:指向"new Class()"函数的指针

gal*_*tte 1 c++ pointers function

我有一个Parent抽象类,派生FooBar类.它们都有一个带string name参数的构造函数.它们有一个string type()成员函数,它分别返回"foo"和"bar".

现在我想用键"foo"和"bar"构建一个字典,值等于指向函数的指针,创建相应类的新实例.这意味着这些指针将是类型Parent* (*) (const string &),执行它们将等同于调用new Foo(name)new Bar(name)

我可以避免为每个只调用new的类创建一个静态函数,并获得指向这个静态函数的指针吗?

谢谢!

编辑:实际上,这背后的目标是在我的应用程序中实现一个插件系统,插件添加新的Derived类类型.插件作者通常是我的客户,因此,我想让他们拥有最简单和优雅的界面.因此,声明和注册工厂功能应该尽可能简单和尽可能短

Kon*_*lph 8

我可以避免为每个只调用new的类创建一个静态函数,并获得指向这个静态函数的指针吗?

是的,您可以创建一个通用函数:

template <typename T>
ptr_type<Parent> create() {
    return new T();
}
Run Code Online (Sandbox Code Playgroud)

...然后获取其地址(但您需要获取每个派生类型的地址).

请注意,我明确没有用作T*返回类型 - 原始指针永远不应该拥有内存......应该在这里使用适当的智能指针.