我正在尝试实现一种注册类的方法(代码中的“ Car”),然后使用Factory模式,在运行时实例化一个对象(基类为“ Transport”,“ Car”从其继承) )。
这是我在注册表中的代码。h
#define REGISTER_CLASS(NAME, TYPE, BASE) static Register<BASE> registrer((const char*)NAME, [](void) -> BASE* { return new TYPE();});
template <class TClass>
class Register {
public:
Register<TClass>(const char* className, std::function<TClass* (void)> classFactoryFunction);
};
这是Registy.cpp
template <class TClass>
Register<TClass>::Register(const char* className, std::function<TClass* (void)> classFactoryFunction){
// Register the class factory function
Factory::Instance()->RegisterFactoryFunction(className, classFactoryFunction);
}
在Car.cpp中,我使用以下代码注册Car:
REGISTER_CLASS((const char*)"Car", Car, Transport);
如果我不使用模板,那么我所有的代码都可以工作... 使用模板,出现以下错误:
sketch / src / Car.cpp.o:在函数_GLOBAL__sub_I__ZN10CarC2Ev':
sketch/src/Car.cpp:42: undefined reference to
中的Register :: Register(char const *,std :: function)'
collect2:错误:ld返回1退出状态
我的代码有什么问题?