構造体の配列からstd::vectorを初期化するにはどうすればよいですか。ここで、構造体にはさまざまなタイプの和集合が含まれています。つまり、配列は、int、char*などの特定のタイプの値を格納するために使用されます。
これはこれまでの私の解決策ですが、より良いアプローチを探しています:
convert関数は、svector<int>
を格納する場合はaを返し、を格納する場合はaを返します。int
vector<std::string>
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;
}