我已經爲一個非常簡單的打印函數編寫了一個模板,並且將它放在了一個所有處理控制檯IO的自定義函數庫中。在單獨的.cpp文件中專門設計函數模板
我已經爲一個特定的項目編寫了第二個庫,那是一個原創的小孩。它專門化了其中一個模板。
我遇到了一個錯誤(我懷疑)是由main.cpp中的調用在專用模板聲明之前發生的。錯誤有這樣一行:
In instantiation of 'static void baseIO::print(S) [with s = std::vector<int>]'
這意味着它的調用的specialIO::print()
baseIO::print()
代替
我試圖使specialIO::print()
普通函數,而不是一個模板,並在頭宣佈它作爲正常的,但否認主.cpp訪問基本模板。
有沒有辦法讓我的專業化在main.cpp中可用而無需
宣佈
在那裏實現呢?
//in main.cpp
#include <vector>
#include "specialIO.h"
main(){
std::vector<int> myVector;
specialIO::print(myVector);
specialIO::print("hello world");
return 1;
}
。
//in baseIO_templates.cpp - templates are outside of the baseIO.cpp file because of linker errors
template<typename S> //primary template
void baseIO::print(S str){
std::cout << str;
}
//baseIO.h
class baseIO{
public:
template<typename S> //primary template
static void print(S str);
}
#include "baseIO_templates.cpp"
。
//specialIO.cpp
template<> //specialized template
void static specialIO::print(vector<int> myVector){
for(int i : myVector){
baseIO::print(i)
}
}
//specialIO.h
class uberIO : public baseIO {
//empty
}
任何特定的原因,爲什麼你總是複製矢量,而不是通過const ref傳遞它? – axalis