使用类模板的静态constexpr作为模板参数

时间:2018-07-13 17:30:45

标签: c++ templates

我有一个基类,其中包含具有模板化大小的缓冲区。然后,我创建具有特定大小的子类。大小均应为相同数字的倍数。我以为可以在基类中将该数字设为constexpr,但是编译器不会接受constexpr作为模板参数。这是一些示例代码:

template<int buf_size> class A
{
    public:
        static constexpr int basic_size = 256;
    protected:
        int buf[buf_size];
};

class B : A<2 * A::basic_size>
{
    public:
        void other_stuff();
};

但是编译器告诉我“模板参数1无效”。我尝试在A后面添加<>,但没有帮助:

class B : A<2 * A<>::basic_size>   //Same error

似乎我必须提供一个实际数字作为模板参数:

class B : A<2 * A<0>::basic_size>  //Works!

但是,这很丑陋。我是C ++的新手。有一个更好的方法吗?我正在为微控制器编写代码,因此需要在编译时静态分配缓冲区-因此需要模板。

1 个答案:

答案 0 :(得分:3)

  

大小均应为相同数字的倍数。

如果这是您的意图,则说明您在发布的代码中使用的号码不正确。我建议:

template<unsigned int Multiplier=1> class A
{
    public:
        static constexpr int basic_size = 256;
    protected:
        int buf[buf_size*Multiplier];
};

class B : A<2>
{
    public:
        void other_stuff();
};
相关问题