5

我有一个应该允许void作为模板参数的模板类。这个类确实有一个传递参数引用的函数,所以我做了以下事情:

template <typename T>
struct trait
{
    typedef typename boost::conditional<
        boost::is_void<T>::value,
        void, T &
    >::type type;
};

template <typename T>
struct foo
{
    typename trait<T>::type ref()
    {
        // do something
    }
};

然而编译器声称我会voidstruct trait<void>. 为什么会这样,我怎样才能实现我想要的?

4

1 回答 1

10

好吧,void当你说T&. 这似乎最好处理专业化:

template <typename T> struct trait { typedef T& type; };
template <> struct trait<void> { typedef void type; };
于 2012-10-19T05:20:22.017 回答