Получение типа из значения шаблона, переполнение стека

У меня есть следующий метод, в котором я использую Boost :: вариант. Я пытаюсь получить значение, основанное на типе T, Если boost::get<T> терпит неудачу, я хочу обработать это особым образом, если T является int или unsigned int. Есть ли способ узнать, если T такое int или unsigned int?

Я не думаю, что я могу использовать специализацию шаблона в этом случае, я могу?

РЕДАКТИРОВАТЬ: Кроме того, у меня еще нет доступа к C ++ 11 (скоро я надеюсь)

template < typename T, typename C, void (C::*setterFcn)(const T&) >
void binder( const Variant& value_var, C* c )
{
const T* typeData = boost::get<T>(&value_var);

if ( NULL == typeData )
{
// Need to check for int or unsigned int here somehow
}

(((C*) c)->*(setterFcn))(*typeData);
}

1

Решение

В C ++ 11 вы можете использовать std::is_same и в C ++ 03 вы можете сделать что-то вроде этого:

template <typename T1, typename T2>
class is_same
{
public:
static bool const value = false;
};

template <typename T>
class is_same<T, T>
{
public:
static bool const value = true;
};

и использовать его в точности как стандартная версия C ++ 11.

4

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

Вы также можете использовать is_same () на boost или на C ++ 11.

http://www.boost.org/doc/libs/1_51_0/libs/type_traits/doc/html/boost_typetraits/reference/is_same.html

http://en.cppreference.com/w/cpp/types/is_same

4

Возможно, самый простой способ — просто делегировать перегруженным функциям или шаблонам функций: вы определяете общую обработку, возможно, ничего не делая, в одной функции и специализированную обработку либо в двух отдельных функциях (если дополнительная обработка тривиальна), либо в enable_ifФункция ed с проверкой состояния для int или же unsigned int,

1
По вопросам рекламы [email protected]