我在类Config
中声明了类型,将其传递给基类Parent
,这样Child
就可以访问。
其思想是每个Child
(有很多)不必一直声明它自己的using
声明,因为它们已经在Parent
中了。
但是,这不能编译。Child
不能看到Parent::Type
。
有可能以某种方式实现这一点吗?
template<class CONFIG>
struct Parent
{
using Type = typename CONFIG::Type;
// Plus a lot more types....
};
template<class CONFIG>
struct Child : public Parent<CONFIG>
{
void x(Type p){} // Compiler error. Cannot see Parent::Type
};
struct Config
{
using Type = int;
// Plus a lot more types....
};
int main()
{
Child<Config> c;
return 0;
}
1条答案
按热度按时间hm2xizp91#
它们是自动继承的,但不可见。它们不可见的原因是,在名称查找过程中不考虑模板基类。它不是特定于类型的,成员变量也是如此。如果希望它们是可访问的,则需要将它们引入范围: