1

我有以下使用 boost::variant 的方法。我尝试根据 type 获取值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);
}
4

3 回答 3

4

您也可以在 boost 或 C++11 上使用 is_same()。

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

于 2012-10-09T21:37:24.320 回答
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 标准版本。

于 2012-10-09T21:42:50.723 回答
1

最简单的方法可能是只委托给重载函数或函数模板:您在一个函数中指定一般处理,可能什么也不做,而在两个单独的函数(如果额外的处理是微不足道的)或在enable_ifed 函数中指定专用处理条件检查intor unsigned int

于 2012-10-09T21:38:13.743 回答