模板链接问题C ++

时间:2010-11-25 09:25:23

标签: c++

我有一个模板类定义,需要在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)等,我意识到我只能实例化一次。我怎么能解决它?

感谢。

2 个答案:

答案 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> ();
相关问题