我在以下代码中遇到了一个奇怪的(或者可能不是)错误:
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
方法在模板中时,出现以下错误 (gcc)
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
中时,一切都很好。
我是否遗漏了一些微妙的语法?或者这是模板限制?
最佳答案
派生类时,'private'是默认的; 否则,您必须为派生自的每个类使用“public”或“protected”关键字:
class C : public A, public B
{
void f();
};
关于C++ 嵌套模板 : inaccessible static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40784773/