如何从结构数组中初始化std :: vector,其中struct包含不同类型的联合。换句话说,该数组用于存储特定类型的多个值,可以是int,char *等。使用来自数组的数据初始化std :: vector
这是我的解决方案,但我正在寻找更好的方法:
如果转换函数存储int
,则返回vector<int>
;如果存储char*
,则转换函数返回vector<std::string>
。
下面的值类型是一个包含称为值的联合的结构。下面的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;
}
请说明。 1.容器保证只包含具有单一类型值的联合和2.检查哪些类型的容器值是(确定'T'类型)不是“转换”责任并在其他地方完成? – Rost
@Rost容器保证只包含单个类型的值。关于容器包含的类型不是convert的责任。 – Baz