Hallo!具有多個模板參數的C++單模板專業化
我想只專注於兩種模板類型之一。例如。 template <typename A, typename B> class X
對於單個功能X<float, sometype>::someFunc()
應該有一個特殊的實現。
示例代碼:
main.h:
#include <iostream>
template <typename F, typename I>
class B
{
public:
void someFunc()
{
std::cout << "normal" << std::endl;
};
void someFuncNotSpecial()
{
std::cout << "normal" << std::endl;
};
};
template <typename I>
void B<float, I>::someFunc();
main.cpp中:爲class B
#include <iostream>
#include "main.h"
using namespace std;
template <typename I>
void B<float, I>::someFunc()
{
cout << "special" << endl;
}
int main(int argc, char *argv[])
{
B<int, int> b1;
b1.someFunc();
b1.someFuncNotSpecial();
B<float, int> b2;
b2.someFunc();
b2.someFuncNotSpecial();
}
編譯失敗。這是真的,這在C++中是不可能的嗎?什麼是最好的解決方法?
[編輯]
template <float, typename I> void B<float, I>::someFunc();
導致 main.h:26:錯誤: '浮動' 不是的模板常量參數
template <typename I> void B<float, I>::someFunc();
導致 main.h有效的類型:27:錯誤:使用不完整類型「B類」無效
而我正在使用gcc。
[編輯]
我不想專門全班同學,因爲有沒有一個專業化等功能。
類模板A與您的問題有關嗎? – Doug 2010-09-22 11:51:43
我認爲這會讓問題更容易理解。我將刪除它。 – tauran 2010-09-22 11:53:08
這在stackoverflow上已經被問過幾百次了:)我想我們中的一些人可以設置一個真正的模板常見問題與這樣的問題。人們可以檢查常見問題,看看他們的問題是否得到解答,而不必搜索一個愚蠢的問題。 – 2010-09-23 04:53:39