我很努力地訪問類模板中定義的靜態成員函數。 在頭文件TemplateTest.h我定義的主類模板爲:類模板專業化中的靜態成員函數
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
然後源文件TemplateTester.cpp我把專業化:
#include "TemplateTest.h"
template<>
struct TemplateTest<int, bool>
{
static void invoke()
{
std::cout << "invoke<int, bool>" << std::endl;
}
};
template struct TemplateTest<int, bool>; //instantiate to resolve linker issue
我明確實例化的類有這麼鏈接器解析正確。
在驅動程序driver.cpp:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
當我編譯克TemplateTest.cpp ++它正確生成目標文件,但是當我嘗試將其鏈接到驅動程序類它給我的鏈接錯誤「未定義引用到`TemplateTest :: invoke()「
我經歷了其他相關的帖子,如this one,但我沒有試圖訪問函數模板。
任何線索都非常感謝。
將實現移動到頭文件。模板的實現需要對所有使用它們的TU都可見。 –