4
我有一種奇怪的(或者沒有)錯誤與下面的代碼:C++嵌套模板:不可訪問靜態方法
template<typename T>
class Registrer {
public:
Registrer() {
Registry::register(T::instance);
}
};
template<typename T>
class RegisteringClass {
private:
static const Registrer<T> REGISTRER;
public:
RegisteringClass() { Q_UNUSED(REGISTRER); /* force static instantiation */ }
static const WhatEver *instance() { static T INSTANCE; return &INSTANCE; }
};
template<typename T>
const Registrer<T> RegisteringClass<T>::REGISTRER;
class Something : public WhatEver, RegistringClass<Something> {
}
當instance
方法是在模板中,我得到了以下錯誤(海合會)
error: 'static const WhatEver* RegisteringClass<T>::instance() [with T = Something]' is inaccessible
static const WhatEver*instance() { static T INSTANCE; return &INSTANCE; }
error: within this context
Registry::register(T::instance);
In instantiation of 'static const WhatEver* RegisteringClass<T>::instance() [with T = Something]':
而instance()
在Something
,一切都很好。
我是否錯過了一些微妙的語法?或者這是模板限制?
。定義一個「類」時,它總是默認爲私有的,在單一繼承和多重繼承中。當定義一個「結構」時,它總是默認爲結構,也是單一繼承和多重繼承。同時聲明「public/private」關鍵字僅影響到它所附帶的父類,而不是所有的父類,這是OP的實際問題 – LoPiTaL
好的,我改變了我的答案以獲得更多的一般性。 – Trantor
錯誤...因爲沒有提及錯誤信息中的可見性,所以我沒有想到它... 我有我的子類構造函數應該是私人的問題...猜我會去與朋友類 –