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
错误...因为没有提及错误信息中的可见性,所以我没有想到它... 我有我的子类构造函数应该是私人的问题...猜我会去与朋友类 –