c++ - 将对象指针转换为 char 数组

标签 c++ inheritance casting polymorphism ns-3

unsigned char *check = NULL;
check = (dynamic_cast<unsigned char *>( ns3::NetDevice::GetChannel() ));

这就是我正在尝试的。但错误是:

error: cannot dynamic_cast ‘ns3::NetDevice::GetChannel() const()’ (of type ‘class       ns3::Ptr<ns3::Channel>’) to type ‘unsigned char*’ (target is not pointer or reference to class)

我也试过:

reinterpret_cast

但它根本不起作用。

最佳答案

ns3::NetDevice::GetChannel() 的返回类型是某种自定义智能指针;在看不到它的定义的情况下,我们只能猜测如何将它转换为原始指针。

也许它实现了一个转换运算符,operator T*(),尽管这通常被认为是一个坏主意,因为它很容易意外地进行无意的转换。在这种情况下,您可以这样做:

void * check = ns3::NetDevice::GetChannel();

否则,也许它有一个成员函数可以转换为原始指针。标准智能指针通常调用此 get():

void * check = ns3::NetDevice::GetChannel().get();

如果它不提供,并且你真的想获得一个原始指针,那么你可以取消引用它并获取一个指向被取消引用的对象的指针(假设它支持取消引用;否则,调用它有点奇怪一个指针):

void * check = &*ns3::NetDevice::GetChannel();

一旦你有了一个void *,你可以使用static_cast将它变成unsigned char *,如果你想要的话。小心处理它,因为乱用对象的字节很容易导致未定义的行为。

更新:如果 ns3::Ptr 是记录的模板 here , 然后你可以使用以下方法获取原始指针:

void * check = PeekPointer(ns3::NetDevice::GetChannel());

关于c++ - 将对象指针转换为 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266801/

相关文章:

c++ - C++:旧的C风格的字符串数组存在问题(如Char **)

C++ 分析 : KiFastSystemCallRet

c++ 数据对齐/成员顺序和继承

lambda - Java 8 类型推断错误,将 lambda 表达式分配给 Object 类型的变量

c++ - 快速 C++ 图形(如编程时间)

c++ - 如何解决 "read of non-constexpr variable ' a' is not allowed in a constant expression"with boost.hana

C++ 死亡钻石

Java继承: Difference while inheriting super class members and variables

javascript - 从 C/C++ 移植到 JavaScript 时如何处理负数或无符号字符?

c# - 在 C# 中转换异常