1
專業一個基類的成員函數有一個看看這個代碼:在派生類模板
struct foo {
virtual int bleh() {
return 42;
}
};
template<typename T>
struct bar : public foo {
};
// ERROR
template<>
int bar<char>::bleh() {
return 12;
}
我想只爲bar<char>
提供base::bleh
的定義,但是編譯器(GCC 4.7。 2)rejects我的代碼如下診斷:
template-id ‘bleh<>’ for ‘int bar<char>::bleh()’ does not match any template declaration
好像base::bleh
以某種方式隱藏在bar
。使用下面的定義bar
我已經解決了這個問題:
template<typename T>
struct bar : public foo {
// doesn't work
//using foo::bleh;
// this works
int bleh() {
return foo::bleh();
}
};
不過我很好奇,爲什麼這個不能編譯。爲什麼編譯器會拒絕我的代碼?