C++ 嵌套模板 : inaccessible static method

标签 c++ templates

我在以下代码中遇到了一个奇怪的(或者可能不是)错误:

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/

相关文章:

c++ - 在不使用变量的情况下实例化 ifstream 对象

C++ 模板类 = 类型名

c++ - 如何获取 Windows 启动时间?

c++ - 将文件拖放到 QDialog 内的 QTreeWidget 中

c++ - 我可以比较 C++ 中的 2 个结构吗?

c++ - 在 C++14 的 Variadic 模板中选择可调用类型和不可调用类型是否有一个优雅的解决方案

templates - AIML,识别模式中保存的变量

c++ - 编写死亡测试以验证 std::set_terminate 行为

模板函数上的 C++ 模板类成员

C++ 模板专门化以提供额外的成员函数?