c++ - 无法在没有显式范围的情况下访问模板基类的静态成员

标签 c++ c++11 templates static

Demo

具有静态成员的模板类 foo .

template <typename... T>
struct A {
    static constexpr bool foo = true;
};

试图访问 foo 的 A 的模板派生类。

template <typename... T>
struct B  : A<T...> {
    void yo() {
        std::cout << foo << '\n';
    }
};

这失败了。谁能解释为什么??我可以通过直接访问它来解决它,比如 A<T...>::foo但是如果 B 有自己的静态变量隐藏 foo 怎么办?

如果第三方/主要人员仅通过模板知道 A 或 B,请说 TClass , 他们如何访问 TClass::foo不知道内部结构?

最佳答案

请注意 foo是一个非依赖名称,但是 A是依赖于模板参数 T... 的依赖基类.标准 C++ 表示不会在依赖基类中查找非依赖名称。

如您所说,使用 A<T...>::foo工作正常,因为它是一个从属名称。同样,B::foo也能正常工作。

你可以

void yo() {
    std::cout << A<T...>::foo << '\n';
    std::cout << B::foo << '\n';
    std::cout << this->foo << '\n';
}

using A<T...>::foo;
void yo() {
    std::cout << foo << '\n';
}

关于c++ - 无法在没有显式范围的情况下访问模板基类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43342246/

相关文章:

c++ - 在显式初始化期间尝试创建函数拷贝时出错

multithreading - 当 main 退出时,控制台输出到哪里?

PhpDocumentor : How to choose templates?

c++ - 指针的模板数组类

c++ - 如何在C或C++中包装参数并将其传递给system或exec *

c++ - std::stringstream 不读取空格

c++ - 如何使用智能指针跟踪类的对象?

c++ - 固定大小的容器到可变参数模板参数列表的转换

c++ - 为什么这个 typedef 允许我在此模板中使用基类成员函数指针?

c++ - DJI OSDK 通过串口向 DJI Matrice 100 发送命令时的命令延迟