[英]Template linking problem 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)等,我意識到我只能實例化一次。 我該怎么辦呢?
謝謝。
您應該能夠為您需要的每種類型實例化foo
。
template void foo<int>();
template void foo<double>();
template void foo<std::string>();
這有點繁瑣,這是許多庫傾向於在頭文件中提供模板函數實現的原因,因此任何實例化都可用於包含頭的任何cpp文件。
模板專門化應位於頭文件中的單獨轉換單元(.cpp文件)和模板(通用)定義中。 在foo.h中添加定義
template <typename T> void foo ()
{
std::cout << "Here I am! << std::endl;
}
在foo.cpp中使用它
foo <int> ()
foo <std::string> ();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.