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