我有一个模板类,应该允许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
}
};
Run Code Online (Sandbox Code Playgroud)
然而编译器声称我会void在实例化中形成一个引用struct trait<void>.为什么这样,我怎样才能实现我的目标?
好吧,void当你说时,你明确地在条件类型定义中形成了一个引用T&.这似乎最好处理专业化:
template <typename T> struct trait { typedef T& type; };
template <> struct trait<void> { typedef void type; };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3236 次 |
| 最近记录: |