我正在努力访问在类模板中定义的静态成员函数。在头文件 TemplateTest.h 中,我将主类 Template 定义为:
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
然后 Source File 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;
}
当我使用 g++ 编译 TemplateTest.cpp 时,它会正确生成目标文件,但是当我尝试将其链接到驱动程序类时,它会给出我的链接器错误“未定义对 `TemplateTest::invoke() 的引用”
我浏览了其他类似的相关帖子,但我没有尝试访问功能模板。
任何线索都非常感谢。