我有一個聲明像一個函數:強制模板函數實例在
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」的定義嗎? –