我正在编写一个我不想实例化的类。它的所有成员都是静态的。此类代表微 Controller 的外围设备。由于微 Controller 中只有一个外围设备的实例,因此创建该类的实例对我来说没有意义。该类仅对该外围设备的数据和功能进行分组。
该类的一个数据成员是一个数组,该类的用户应在编译时定义其大小。如果我可以创建此类的对象,我知道我可以在构造函数的初始化列表中初始化常量,但我真的不想创建此类的实例。也许我可以使用模板并将数组大小设置为模板参数,但我需要使用类似 my_class<5>::do_something()
的东西对于每个成员(member)电话。有没有更简单的方法来解决这个问题?我想让我的课像这样:
class my_class
{
private:
static const int _size;
static int _array[_size];
public:
static void array_size(int size) { _size = size; }
static void do_something() { /* .... */ }
};
最佳答案
考虑使用用 constexpr 数组大小参数化的类模板,然后创建一个别名:
#include <array>
template <std::size_t Size>
class my_class_impl {
private:
static constexpr std::size_t size = Size;
static std::array<int, Size> arr;
public:
static void do_something() { /* .... */ }
};
template <std::size_t Size>
std::array<int, Size> my_class_impl<Size>::arr;
using my_class = my_class_impl<10>;
int main() {
my_class::do_something();
}
关于c++ - 如何定义作为不可实例化类的静态成员的数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41417144/