繁体   English   中英

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

[英]Using a class template's static constexpr as the template parameter

我有一个包含具有模板化大小的缓冲区的基类。 然后,我创建具有特定大小的子类。 大小均应为相同数字的倍数。 我以为可以在基类中将该数字设为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 ++的新手。 有一个更好的方法吗? 我正在为微控制器编写代码,因此我需要在编译时静态分配缓冲区,因此需要模板。

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

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

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();
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM