【发布时间】:2020-02-18 04:27:47
【问题描述】:
在继承自类A 的类B 中,可以使用using 声明将A 的成员带入B,甚至是模板,如下所示:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
但是转换模板可以做到吗?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
似乎无法通过名称引用模板,但我希望被证明是错误的或得到一些澄清。
【问题讨论】:
-
用例是什么?
-
@RSahu 大概是为了继承转换构造函数而不需要公共继承。
-
@Ayjay,如果是这样,那么使用
private继承是错误的,IMO。 -
@RSahu Ayjay 是正确的。更具体地说,我想允许某些类
C继承自B,但C不应访问A的受保护方法。但是,我希望A的公共方法保持公开,包括这个转换运算符。我知道我可以通过几种方式解决这个问题,但我宁愿避免编写额外的代码来获得这么少的好处。 -
@Apples,这似乎是设计缺陷。我不知道你对这些课程有多少控制权。如果您可以控制
A中的内容,则可以将A分为两个类 - 一个类B可以继承publicly 和另一个类privately。
标签: c++ inheritance language-lawyer using-declaration conversion-operator