Tom*_*mas 3 c++ types casting void
我在想,为什么不能有一个不是指针的void数据类型?
当然,你可以通过拥有可以超越整个确定尺寸的东西
void4
void8
void32
Run Code Online (Sandbox Code Playgroud)
然后只允许将一个void数据类型"强制转换"为另一个类,如果它的大小等于或小于类的大小.
有什么东西我不知道,或者C++委员会只是认为它是不好的做法?
编辑:
我没有很好地解释自己,所以我将举例说明它的用法:
main()
{
/*
Lets make a list of unknown elements
std::string is 8 bytes, and float is 4
bytes, so we'll reserve 8 byte sequences
*/
vector<void8> elements;
elements.push_back((void8) string("First string element"));
elements.push_back((void8) float(5.76) );
elements.push_back((void8) string("Third string element"));
// Ect.
cout << (string) elements[0];
cout << (float) elements[1];
cout << (string) elements[2];
cout << (float) elements[2]; // Garbage
void1 data;
data = (void1) bool(1);
data = (void1) unsigned int(80094); // Error, not enough size
}
Run Code Online (Sandbox Code Playgroud)
它名为void,因为你不知道它当前存储的类型,类似于void指针.
它被称为boost :: variant或boost :: any.它是允许的最大数据类型+ sizeof(指针)的大小,完全是类型安全的.