c++ - C++中的继承特性

标签 c++ templates struct traits

我正在用 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/

相关文章:

c++ - 在多行中用相应的元素格式化 C++ 代码

c++ - 可变参数 C++ 模板解压后终止?

c++ - 在没有参数列表的情况下无效使用模板名称

c++ - 如何为各种高度相似的类型创建通用函数?

c++ - 重构期间结构的聚合初始化是否安全?

c++ - 使用不同类型容器的迭代器范围初始化容器

c++ - 模板可以扩展 C++ 函数中的类吗?

c - 按值或按指针传递和返回结构 - 是否有默认指南?

c++ - 在类或结构中使用运算符?

C++ 简单字符检查