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/