为什么在这个模板函数中无法推导类型?
template<typename T>
std::istream & read(std::istream & istr, typename std::enable_if<std::is_pod<T>::value, T>::type & value)
{
return istr.read( reinterpret_cast<char*>(&value), sizeof(T));
}
int main()
{
int x;
read(cin, x); // error here
}
error C2783: 'std::istream &read(std::istream &,std::enable_if<std::tr1::is_pod<_Ty>::value,T>::type &)' : could not deduce template argument for 'T'
如果我指定 read
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
或者
你的方法不起作用的原因是,如果你知道参数的类型,则不足以确定 T 。如果
enable_if
是如下所示的模板会怎样?::value, T>
中的任何T
都可以做到这一点。一般来说,由...T...::type
构成的函数参数类型称为非推导上下文,不能用于推导T。
Or
The reason yours does not work is because it is not sufficient for determining T if you know the type of the argument. What if
enable_if
would be a template like the following?Any
T
in<std::is_pod<T>::value, T>
would do it.In general,a function parameter type formed by...T...::type
is called a non-deduced context and can't be used to deduceT
.