从模板值C ++获取类型

时间:2012-10-09 21:33:03

标签: c++ templates boost boost-variant

我有以下方法,我使用boost :: variant。我尝试根据类型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);
}

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:4)

在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标准版本。

答案 2 :(得分:1)

最简单的方法可能就是委托重载的函数或函数模板:在一个函数中指定一般处理,可能什么都不做,在两个单独的函数中指定专门的处理(如果额外的处理是微不足道的)或者enable_if ed函数,条件检查intunsigned int