具有静态成员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怎么办?
如果第三方/主管只通过模板说TClass
知道A或B,那么他们如何在不知道内部的情况下访问TClass::foo
?
答案 0 :(得分:1)
请注意,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';
}