enums — C ++ включает тип данных

у меня есть Attribute класс, который имеет Enum, определяющий тип атрибута (INT_64, UINT 64, INT_32, STRING, DOUBLE, etc.). Этот класс Attribute использует boost :: any для хранения вектора типов, указанных в enum.

На данный момент для работы с этими данными у меня есть большой оператор switch, и, по крайней мере, для базовых типов данных я чувствую, что был бы более простой способ сделать это.

Мой оператор 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)));

2

Решение

Ну, к сожалению, ответ — нет. Как сказал Р. Саху в комментарии:

Не так, как вы хотите. Если get_value является шаблоном функции, вы можете
используйте get_value, только если attribute.type является известным
интегральная константа во время компиляции.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector