1. 程式人生 > >C++ 模板類繼承,成員訪問問題

C++ 模板類繼承,成員訪問問題

c++中宣告一個模板類及子類,在子類中如果需要訪問父類的protected變數,需要使用父類的類作用域限定符,否則會報“identifier not found”錯誤。

例如:

template<typename T>
class A
{
protected:
	int a;
};

template<typename T>
//模板的繼承,基類需要指定模板引數
class B : public A<T>
{
public:
	void func()
	{
        //此處必須使用A::a來訪問;否則會找不到a的定義
        //如果不是模板類,顯然可以直接使用a來訪問
		cout << A::a << endl;
	}
};

模板函式的內部類繼承時,也是類似的。

例如:

template<typename T>
class outer
{
public:
	class innerBase
	{
	protected:
		T a;
	};

    //在模板類內部繼承相同範圍內的基類,基類能指定模板引數(內部類預設使用外部類的模板引數)
    //如果繼承其他的模板類,則需要指定模板引數;內部類也可以定義自己的模板引數
	class innerDrive : public innerBase
	{
	public:
		void func()
		{
            //此處必須使用innerBase::a(或者使用outer::innerBase::a)來訪問a
            //否則無法找到a的定義
			cout << innerBase::a << endl;
		}
	};
};