gpt4 book ai didi

c++ - 转换为未知模板类型

转载 作者:行者123 更新时间:2023-11-28 01:00:57 24 4
gpt4 key购买 nike

所以我看到了这样的代码:

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 字节,ResponseMessage100 字节。转换时,如果 msg 对象有 50 个字节,它将被转换为 RequestMessage,如果 msg 对象有 100 字节,它将被转换为 ResponseMessage。这是正确的吗?

最佳答案

我不太确定我理解这个问题,但我想你是在问编译器如何知道你想转换成什么类型​​,因为参数总是一个 Message&

它不会根据大小自动选择:断言是用来捕获程序员错误的。

你必须在调用函数时手动指定你想要的类型:safe_ptr_cast<RequestMessage>(msg)

编辑:我的意思是说您可能想要查看虚函数,因为它们可能更合适(至少在一种情况下我可以想象您会拥有这样的函数)。

关于c++ - 转换为未知模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721733/

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