【发布时间】:2018-11-02 18:40:35
【问题描述】:
我正在尝试编写一个单独处理数字和非数字数据的流类。有人可以向我解释为什么这段代码无法编译吗?
#include <iostream>
#include <cstdlib>
#include <type_traits>
#include <limits>
class Stream
{
public:
Stream() {};
template<typename T, typename std::enable_if_t<std::numeric_limits<T>::is_integer::value>>
Stream& operator<<(const T& val)
{
std::cout << "I am an integer type" << std::endl;
return *this;
};
template<typename T, typename std::enable_if_t<!std::numeric_limits<T>::is_integer::value>>
Stream& operator<<(const T& val)
{
std::cout << "I am not an integer type" << std::endl;
return *this;
};
};
int main()
{
Stream s;
int x = 4;
s << x;
}
【问题讨论】:
-
您可以至少发布编译器错误(逐字)。以及相关编译器的详细信息。还有你的操作系统。请尝试提供所有可能与问题相关的信息。
-
不会真正解决问题,但
std::numeric_limits<T>::is_integer::value应该是std::numeric_limits<T>::is_integer。is_integer没有value成员 -
另外,你可以使用
std::is_integral
标签: c++ templates sfinae enable-if