App*_*les 8 c++ inheritance using-declaration conversion-operator language-lawyer
在从class B继承的类中A,可以使用using声明将in的成员(甚至是模板)带A进去B,如下所示:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
Run Code Online (Sandbox Code Playgroud)
但是可以为转换模板完成吗?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
Run Code Online (Sandbox Code Playgroud)
似乎没有办法通过名称来引用模板,但是我希望被证明是错误的或得到一些澄清。
作为解决方法,您可以强制转换为基类并显式转换它:
struct A {
template <typename T>
operator T() {
return T{};
}
};
struct B : private A {
template <class T>
operator T() {
return static_cast<T>(static_cast<A&>(*this));
}
};
int main() {
A a;
B b;
int i_a = a;
int i_b = b;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |