我有一个 Blah
类型的变量。
我想将其转换为 char[sizeof(blah)]
,而不进行复制。
我需要类型转换足够强大以实例化需要 char[N]
的模板。
我尝试了很多东西,但我不太明白。
我希望这样的东西能够正常工作:
class Blah {
int a;
};
template <typename T>
void foo (T& a)
{
//Not an array
}
template <int N>
void foo (char(&a)[N])
{
//an array!
}
Blah b;
foo(b); //not an array
foo((char[sizeofBlah])b); //hopefully treated as an array
最佳答案
你不能执行这样的转换,那没有意义。您可以做的是获取对象的地址并将该地址重新解释为字节地址:
char* const buf = reinterpret_cast<char*>(&obj);
这应该可以满足您的要求,但要注意使用术语“cast to char[]
”,因为它会混淆正在发生的实际操作。
当然你也可以将地址解释为固定大小缓冲区的起始地址:
using buffer_t = char[sizeof(Blah)];
buffer_t* pbuf = reinterpret_cast<buffer_t*>(&obj);
但请注意,您仍在使用指向此处缓冲区的指针。
关于c++ - 如何将结构转换为 char[] 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505045/