强制转换为未知模板类型
Cast to an unknown template type
所以我看到了这样的代码:
template<class T>
T* safe_ptr_cast(Message& msg) {
assert(msg.header()->size() == T::size());
return msg.header()->size() == T::size ? reinterpret_cast<T*>(msg.dest()) : NULL;
}
如何铸造msg
?通常,参数列表需要有一个参数类型T
,以便函数识别要强制转换的类型。但是,在这种情况下,参数类型是明确声明的。这是否意味着reinterpret_cast
将把Message类型强制转换为相应的子类?
例如,Message
类有一个子类RequestMessage
和一些附加成员,子类ResponseMessage
也有一些附加成员。我假设RequestMessage
的大小是50
字节,而ResponseMessage
的大小则是100
字节。在强制转换时,如果msg
对象有50个字节,则它将强制转换为RequestMessage
,而如果msg
对象有100
个字节,将它强制转换为ResponseMessage
。这是正确的吗?
我不完全确定我是否理解这个问题,但我想你在问编译器如何知道你想转换为什么类型,因为参数总是Message&
它不会根据大小自动选择:断言是用来捕捉程序员错误的。
当您调用函数时,您必须手动指定您想要的类型:safe_ptr_cast<RequestMessage>(msg)
编辑:我本来想评论一下,你可能想看看虚拟函数,因为它们可能更合适(至少在一种情况下,我可以想象你会有这样的函数)。
由于无法根据传递的参数确定模板类型,因此编译器不会尝试确定模板参数
它必须在调用站点上明确指定。
safe_ptr_cast<TheType>(msg);
相关文章:
- OpenCV C++:当垫子类型未知时无法访问垫子元素?
- 参数数据类型未知的可变参数函数
- 矢量迭代器类型未知
- 模板函数的返回类型未知,使用 decltype 时代码重复
- 使用不同类型 /未知类型的类模板初始化向量
- 当类型未知时调用模板方法
- 当类类型未知时,指向非静态成员函数的函数指针
- 如何在数据类型未知的C++中创建模板类
- 组件 X 的超类型未知,其某些属性未经验证
- 当数据类型未知时如何声明数组
- 如何在对象类型未知时实现交换函数
- 类成员是类型未知的派生对象
- 模板中的返回类型未知
- 在运行时之前调用类型未知的模板化函数
- 当类类型未知时调用成员函数
- 在编译时使用类型未知的对象初始化
- 处理运行时类型未知的模板
- 模板类的返回类型未知
- 当编译时数据格式和类型未知时,C++将数据读入内存
- 属性类型未知的模板类中的默认构造函数