我知道基類模板的成員名稱隱藏在派生類的範圍內,因此必須使用this->foo
或Base<T>::foo
來訪問。但是,我記得C++也允許你使用關鍵字using
,它可以在派生類函數中派上用場,它經常訪問基類變量。所以,爲了避免在任何地方混淆this->
的功能,我想使用using
關鍵字。「使用」指令在模板內失敗
我知道我以前做過這件事,但無論出於何種原因,我現在都無法使用它。我可能只是在做一些愚蠢的事,但下面的代碼不會編譯:
template <class T>
struct Base
{
int x;
};
template <class T>
struct Derived : public Base<T>
{
void dosomething()
{
using Base<T>::x; // gives compiler error
x = 0;
}
};
int main()
{
Derived<int> d;
}
錯誤,(用GCC 4.3)是:error: ‘Base<T>’ is not a namespace
爲什麼不這項工作?