例如,如果您要编写变体类型类,您自然需要识别该类的实例所携带的类型。我想知道是否有人知道任何可能感兴趣的所有原始数据类型的官方或半官方(事实上?)参考?
只有原语,不需要抽象类型,如 string 或 handle 。
感谢。
答案 0 :(得分:4)
答案 1 :(得分:3)
唯一官方引用是ISO/IEC 14882 C ++标准。
答案 2 :(得分:0)
Google搜索始终是一个良好的开端。 Here。现在,推出你的实际问题。
答案 3 :(得分:0)
使用任何第三方变体。
您可以在标准中找到所有数据类型。
答案 4 :(得分:0)
如果使用typeid,则无需了解类型:
#include <typeinfo>
#include <iostream>
using namespace std;
struct var_base
{
const type_info & t;
var_base(const type_info & t) : t(t) {};
virtual ~var_base() {};
};
template<class T> struct var : var_base
{
T value;
var(T x) : var_base(typeid(T)), value(x) {};
};
struct variant {
const static int max_size=16;
char data[max_size];
var_base & v;
variant() : v(*(var_base*)data) {
new (data) var<int>(0);
}
const type_info & getType() { return v.t; }
template<class T> T & get() {
assert(getType()==typeid(T));
return static_cast< var<T> &>(v).value;
}
template<class T> void set(const T & value) {
// Compile time assert is also possible here.
assert(sizeof(var<T>)<=max_size);
v.~var_base();
new (data) var<T>(value);
}
};
main()
{
variant v;
v.set<float>(1.2);
cout << v.getType().name() << endl;
cout << v.get<float>();
cout << v.get<int>(); // Assert fails
}
请注意,如果您可以接受动态分配值,则可以删除max_size。如果您知道最大类型的大小,我只是想表明分配工作也是如此。