我有一个声明像一个函数:强制模板函数实例在
template<typename T>
void MyFunction();
和A类:
template<typename T>
class MyClass
{
public:
typedef void (*Function_T)();
Function_T m_Func;
void DoSomething()
{
m_Func = &MyFunction<T>;
}
}
当我使用类,我就MyFunction<T>
未定义的符号错误。
如果我改变DoSomething
到
void DoSomething()
{
m_Func = &MyFunction<T>;
return;
MyFunction<T>();
}
一切正常,但看起来像一个解决办法,将可能无法与优化工作。
我不能添加
template void MyFunction<T>;
到类,因为它说,它不能在课堂上。有没有其他方法可以强制实例化函数?
编辑:
我能够写一个失败的测试,但在G ++它有不同的消息,实际上是一个编译器错误:http://ideone.com/RbMnh
是否'MyFunction'有身体? – AJG85
@ AJG85:它确实在同一个地方,但它不是解决问题的方法。 – Dani
什么编译器和版本?你是否意识到'Function_T'不是一个函数指针,而是一个'void *'?在实例化处可以使用“MyFunction”的定义吗? –