Attribute
属性のタイプを指定する Enum を持つクラスがあります ( ) INT_64, UINT 64, INT_32, STRING, DOUBLE, etc.
。この Attribute クラスは、boost::any を使用して、列挙型で指定された型のベクトルを保持します。
現時点では、このデータを操作するために大きな switch ステートメントがあります。少なくとも基本的なデータ型については、もっと簡単な方法があると思います。
私のスイッチステートメントは次のようになります。
switch(attribute.type) {
case DOUBLE:
stmt->setNumber(col_counter, Number(attribute.get_value<double>(row_counter)));
break;
case INT_32:
stmt->setNumber(col_counter, Number(attribute.get_value<int_32t>(row_counter)));
break;
}
属性は次のように定義されます。
class Attribute
{
public:
template <typename T>
T get_value(const unsigned index) const
{
const std::vector<T> * v = boost::any_cast<const std::vector<T> >(&data);
return v->at(index);
}
Data_Type_Enum type;
std::string name;
boost::any data;
}
次のようなことをして、switch ステートメントを回避する方法はありますか。
stmt->setNumber(col_counter, Number(attribute.get_value<attribute.type>(row_counter)));