模板参数列表互连的通用结构
template argument list interconnected generic structs
我正在尝试编写一个小型单元库来熟悉泛型编程和隐式转换。我选择将单元组织成各自维度下的结构。为了在单位之间隐式转换,为兼容单位创建构造函数。在应用旨在允许任何数字类型占用 lengthValue 的模板之前,代码段很愉快。我现在收到以下错误,但我不知道如何解决它。
#include <type_traits>
class Distance
{
template<typename GenericNumber, typename = typenamestd::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type> struct feet;
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type> struct inches;
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type>
struct feet
{
public:
feet(GenericNumber _distance);
feet(feet& _distance);
feet(inches _distance);
inline GenericNumber getLength() { return lengthValue; }
private:
GenericNumber lengthValue = 0.0;
};
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type>
struct inches
{
public:
inches(GenericNumber _distance);
inches(feet _distance);
inches(inches& _distance);
inline GenericNumber getLength() { return lengthValue; }
private:
GenericNumber lengthValue = 0.0;
};
};
错误:
Error C2955 use of class template requires template argument list
行数
feet(inches _distance);
inches(feet _distance);
feet(inches<GenericNumber> _distance);
inches(feet<GenericNumber> _distance);
我需要指定我引用的模板类型作为参数,现在看来很明显
我正在尝试编写一个小型单元库来熟悉泛型编程和隐式转换。我选择将单元组织成各自维度下的结构。为了在单位之间隐式转换,为兼容单位创建构造函数。在应用旨在允许任何数字类型占用 lengthValue 的模板之前,代码段很愉快。我现在收到以下错误,但我不知道如何解决它。
#include <type_traits>
class Distance
{
template<typename GenericNumber, typename = typenamestd::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type> struct feet;
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type> struct inches;
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type>
struct feet
{
public:
feet(GenericNumber _distance);
feet(feet& _distance);
feet(inches _distance);
inline GenericNumber getLength() { return lengthValue; }
private:
GenericNumber lengthValue = 0.0;
};
template<typename GenericNumber, typename = typename std::enable_if<std::is_arithmetic<GenericNumber>::value, GenericNumber>::type>
struct inches
{
public:
inches(GenericNumber _distance);
inches(feet _distance);
inches(inches& _distance);
inline GenericNumber getLength() { return lengthValue; }
private:
GenericNumber lengthValue = 0.0;
};
};
错误:
Error C2955 use of class template requires template argument list
行数
feet(inches _distance);
inches(feet _distance);
feet(inches<GenericNumber> _distance);
inches(feet<GenericNumber> _distance);
我需要指定我引用的模板类型作为参数,现在看来很明显