我正在用 C++ 创建一个特征,它将我创建的另一个特征作为模板输入。 但是,当我运行这段代码时,出现以下编译器错误:
error: wrong number of template arguments (1, should be 2) template<\Measure<\int v, Unit u> a>
代码如下:
enum class Unit { km, m, cm };
template<int v, Unit u>
struct Measure
{
public:
static const int value = v;
static const Unit unit = u;
};
template< Measure<int v, Unit u> a>
struct Measure_add
{
public:
static const int value = a::value;
static const Unit unit = a::unit;
};
用法应该是:
std::cout << Measure_add< Measure<4, Unit::m> >::value << std::endl;
这应该给出:
4
最佳答案
Measure_add
可以通过以下方式从 Measure
继承:
template<class>
struct Measure_add;
template<int v, Unit u>
struct Measure_add<Measure<v, u>> : Measure<v, u> {};
static_assert(Measure_add<Measure<4, Unit::m>>::value == 4);
关于c++ - C++中的继承特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308474/