包装类型的铸造
Wrapped Type Casting
有人可以帮助我理解为什么该代码编译:
class A {};
class B : public A {};
void foo( A ) {}
int main() {
B b;
foo( b );
}
但这不是:
class A {};
class B : public A {};
template< typename T >
class wrapper {};
void foo( wrapper<A> ) {}
int main() {
wrapper<B> b;
foo( b );
}
第二个代码(即未编译的代码)中的唯一区别是,A
和B
类被包装为类wrapper
中的模板参数;令人惊讶的是,包装似乎阻碍了从B
到A
的转换。
如果有人可以帮助我修复第二个代码,那也很棒。
class B
均来自 class A
,因此每个 B
is is a A
均可用于其位置。但是,wrapper<A>
与wrapper<B>
没有关系 - 为什么会?
考虑此示例:如果B是A的儿子,B的妻子将是A妻子的儿子(显然不是 - 他们没有关系)。
要完成这样的关系,您需要从wrapper<A>
派生wrapper<B>
,而wrapper<>
是模板类是不可能的。考虑其他方法,在其中将B
发送到wrapper<A>
类或类似方法的方法(工作,如是 a A
)。
相关文章:
- 调用具有未标识类型的类的方法
- C++ 中模板化类型的类层次结构
- 根据模板类型选择类模板的成员类型?
- C++从抽象类型定义类成员
- 实例化具有不完整类型的类模板格式不正确(如果该类型是在之后定义的)
- 简化在 Pybind11 中为 C++ 模板类生成包装类:模板声明不能出现在块范围内
- 重载模板<类型名...>类的函数模板
- 有没有办法将输入类型包装到C++中的模板类?
- C++-用与被包装数据相同的语法构造包装类
- C++-用和结构相同的语法围绕结构构造包装类
- 在设计方面:重载vector类型的类成员的插入运算符
- C++泛型包装类,它为某些函数添加了额外的处理
- 如何减少大量包装类的实现代码?
- 错误:使用 SWIG 的未知类型名称"类"
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 包装任意类型/非类型模板类的模板类
- 性能:基元类型的类型定义与包装类
- 返回包装类中赋值运算符的类型
- 将每个类型包装在模板化类中的可变模板中
- 如何在c++中优化一个简单的数字类型包装器类