我很努力地访问类模板中定义的静态成员函数。 在头文件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都可见。 –