gpt4 book ai didi

c++ - 将模板化基类转换运算符引入派生范围

转载 作者:太空狗 更新时间:2023-10-29 21:33:41 25 4
gpt4 key购买 nike

我有一个基类,它定义了一个受约束的模板化转换运算符

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;

不起作用(编译器似乎试图将其解析为别名模板声明)。

有谁知道实现此目的的正确语法吗?

最佳答案

我会说这是不可能的。即使是这样,您的派生运算符也会隐藏基数 1,因为模板参数不属于 namespace.udecl#15.sentence-1 的一部分。 :

When a using-declarator brings declarations from a base class into a derived class, member functions and member function templates in the derived class override and/or hide member functions and member function templates with the same name, parameter-type-list, cv-qualification, and ref-qualifier (if any) in a base class (rather than conflicting)

不幸的是,模板参数不计算在内,并且转换 operator 的参数类型列表为空,都是 const 并且没有引用限定符。

关于c++ - 将模板化基类转换运算符引入派生范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com