【发布时间】:2020-11-02 08:22:18
【问题描述】:
我想要一个静态多态性,父类的模板大小为std::array。此代码工作正常:
#include <iostream>
#include <array>
using namespace std;
template <size_t size>
class Message
{
public:
size_t GetSize() { return size; }
private:
std::array<uint8_t, size> data_{};
};
class Command : public Message<12>
{
public:
static const size_t kCmdSize{12};
private:
};
class Reply : public Message<16>
{
public:
static const size_t kCmdSize{12};
private:
};
int main()
{
Command cmd{};
Reply rpl{};
cout << "Size: " << cmd.GetSize() << "|" << rpl.GetSize() << endl;
return 0;
}
但我不是幻数的忠实粉丝。
有没有办法使用子类中声明的常量作为父类的参数?类似的东西:
class Command : public Message<kCmdSize>
{
public:
static const size_t kCmdSize{12};
private:
};
直接使用它会尝试使用尚不存在的类中的变量。 使用 C++14。
【问题讨论】:
-
标准方法是使用 CRTP 和 trait 将常量从派生类传播到基类。