【发布时间】:2015-02-23 13:07:08
【问题描述】:
在this answer 中,我真正想做的是在我的模板参数中定义一个typename,它可以用于强制转换和返回。
所以这个:
template <typename T>
typename std::enable_if<sizeof(unsigned char) == sizeof(T), unsigned char>::type caster(T value){ return reinterpret_cast<unsigned char&>(value); }
会变成这样:
template <typename T, typename R = std::enable_if<sizeof(unsigned char) == sizeof(T), unsigned char>::type >
R caster(T value){ return reinterpret_cast<R&>(value); }
对于单个模板特化,这可以正常工作和表现,但假设我添加了另一个特化:
template <typename T, typename R = std::enable_if<sizeof(short) == sizeof(T), short>::type>
R caster(T value){ return reinterpret_cast<R&>(value); }
现在我得到一个错误:
错误 C2995: 'R caster(T)' : 函数模板已定义
有没有办法让编译器相信,对于任何给定的调用,只有其中一个专门化会真正构建?
【问题讨论】:
标签: c++ templates typename redefinition enable-if