具有静态成员的模板类 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/