下面的代码taken from here(并修改了一下)使用g ++编译器生成以下错误消息: 错误:'typedef'的模板声明 /RangeChecks.hpp:145:12:错误:'IsInRange'没有命名类型
以下是我的RangeChecks.hpp文件中的相关部分:
class GreaterEqual
{
public:
template <class T>
static bool Compare (const T& value, const T& threshold)
{
return !(value < threshold); /* value >= threshold */
}
};
class LessEqual
{
public:
template <class T>
static bool Compare (const T& value, const T& threshold)
{
return !(value > threshold); /* value <= threshold */
}
};
template <class L, class R, class T>
bool IsInRange (const T& value, const T& min, const T& max)
{
return L::template Compare<T> (value, min) && R::template Compare<T> (value, max);
}
typedef IsInRange< GreaterEqual , LessEqual > isInClosedRange;
我在互联网上搜索了一个答案,并且有一些类似的东西,但是我找不到它们,解决了我的问题。
答案 0 :(得分:4)
IsInRange
是一个函数,而不是一个类型。做你想做的最简单的方法就是写一个包装器:
template<class T>
bool isInClosedRange(const T& value, const T& min, const T& max) {
return IsInRange<T, GreaterEqual, LessEqual>(value, min, max);
}
答案 1 :(得分:3)
IsInRange
是一个函数模板,而不是一个类模板,所以它的实例化不是一个类型,所以你不能为它创建一个typedef。