我如何从结构数组初始化 std::vector,其中结构包含不同类型的联合。换句话说,数组用于存储特定类型的多个值,可以是 int、char* 等。
到目前为止,这是我的解决方案,但我正在寻找更好的方法:
vector<int>
如果它存储int
s,则convert 函数返回 a ,如果存储 s,vector<std::string>
则返回 a char*
。
下面的 Value 类型是一个包含名为 value 的联合的结构。下面的 Container 类指向此类值的缓冲区。
// union member getter
class Getter
{
public:
void operator()(int8_t& i, const Value& value)
{
i = value.value.i;
}
void operator()(std::string& s, const Value& value)
{
s = std::string(value.value.s);
}
...
};
template<class T>
std::vector<T> convert(Container* container)
{
std::vector<T> c;
c.reserve(container->nrOfValues);
Getter g;
for(int i=0;i<container->nrOfValues;i++)
{
T value;
g(value, container->values[i]);
c.push_back(value);
}
return c;
}