我有一个基类,它定义了约束模板化转换运算符
struct base {
template <typename C, std::enable_if_t<some_constraints<C>, int> = 0>
operator C() const;
};
我还有一个派生类,它实现了另一个具有不同约束的转换运算符:
struct derived : base {
template <typename P, std::enable_if_t<different_constraints<P>, int> = 0>
operator P() const;
};
不幸的是,派生类中的声明隐藏了基类中的运算符。我想将基运算符带入派生范围,但“明显”语法
template <typename C>
using base::operator C;
不起作用(编译器似乎尝试将其解析为别名模板声明)。
有谁知道实现此目的的正确语法?
我想说这是不可能的。即使是这样,您的派生运算符也会隐藏基数,因为模板参数不是根据命名空间.udecl#15.sentence-1:
当 using 声明符将声明从基类引入派生类时,派生类中的成员函数和成员函数模板将覆盖和/或隐藏具有相同名称、参数类型列表、cv- 的成员函数和成员函数模板基类中的资格和引用限定符(如果有)(而不是冲突)
不幸的是,模板参数不计算在内,并且转换operator
有空参数类型列表,是const
并且没有裁判限定符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)