在c ++中继承特征

问题描述 投票:0回答:2

我正在c ++中创建一个特征,它将我制作的另一个特征作为模板输入。但是,当我运行此代码时,出现以下编译器错误:

错误:模板参数的数量错误(1,应为2)template 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

c++ templates struct traits
2个回答
1
投票

不确定这是什么意思:

template< Measure<int v, Unit u> a>

您可能想要这个:

template< typename  a>
struct Measure_add
{
public:
    static const int value = a::value;
    static const Unit unit = a::unit;
};

现在您可以通过实例化它

using m_add = Measure_add< Measure<4,Unit::m> >;

0
投票

不清楚您想要什么,但是可以通过以下方式从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);
© www.soinside.com 2019 - 2024. All rights reserved.