我有一个模板类定义,需要在cpp文件中。采用http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13,我做了类似的事情:
// File "foo.cpp"
#include <iostream>
#include "foo.h"
template<typename T> void foo()
{
std::cout << "Here I am!\n";
}
template void foo<int>();
我从.cpp文件中实例化模板。但是,我需要不同的类型,如foo(string)等,我意识到我只能实例化一次。我怎么能解决它?
感谢。
答案 0 :(得分:4)
您应该能够为您需要的每种类型实例化foo
。
template void foo<int>();
template void foo<double>();
template void foo<std::string>();
这有点繁重,这就是许多库倾向于在头文件中提供模板函数实现的原因,因此任何实例化都可以用于任何包含头文件的cpp文件。
答案 1 :(得分:0)
模板特化应该在一个单独的翻译单元(.cpp文件)和头文件中的模板(通用)定义中。 在foo.h中 添加定义
template <typename T> void foo ()
{
std::cout << "Here I am! << std::endl;
}
在foo.cpp中使用它
foo <int> ()
foo <std::string> ();