是否有可能做這種專業化?
如果是這樣,怎麼樣?C++模板成員專業化 - 這是一個編譯器限制嗎?
有問題的專門標記//這種專業化將無法編譯 我使用VS2008,VS2010,GCC 4.4.3既不可以編譯此。
我知道我可以通過重載來避免這個func但我想知道是否有辦法用模板專業化來做到這一點。 (不切實際/不可取的,雖然它可能是)
#include<iostream>
#include<string>
using namespace std;
template <typename ALPHA>
class klass{
public:
template <typename BETA>
void func(BETA B);
};
template <typename ALPHA> template <typename BETA>
void klass<ALPHA>::func(BETA B){
cout << "I AM A BETA FUNC: " << B <<endl;
}
//THIS SPECIALIZATION WILL NOT COMPILE
template <typename ALPHA> template <>
void klass<ALPHA>::func(string B){
cout << "I AM A SPECIAL BETA FUNC: " << B <<endl;
}
int main(){
klass<string> k;
k.func(1);
k.func("hello");
return 0;
}
如果您將專業化更改爲'void klass :: func (string B);'?這樣它就是一個功能模板的全面專業化(在模板類中)。至少,我想,我現在沒有編譯器。 –
Pieter
2010-06-10 14:55:26
用g ++示例編譯器沒有錯誤。 – sth 2010-06-10 15:01:26