c++ - 如何定义作为不可实例化类的静态成员的数组的大小?

标签 c++ arrays c++11 static compile-time-constant

我正在编写一个我不想实例化的类。它的所有成员都是静态的。此类代表微 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/

相关文章:

c++ - 局部静态变量被多次实例化,为什么?

linux - gcc 4.7.1 C++ 静态局部初始化挂起

javascript - .get() 在 jQuery API 中没有索引的原因?

c++ - 使用具有传感器融合的 9DOF IMU 在 C++ 中进行双积分加速

C# 应用程序在调用 COM 类的方法时崩溃

java - 从 native 代码分派(dispatch)的 pthread 可以回调到 JNI 吗?

arrays - 来自AngularJS中2D数组的表

arrays - 如何覆盖 ansibles 数组变量的子集?

c++ - VS2013编译错误: non-static data member initialization by pointer to member

c++ - 为什么有时不将可变长度数组声明为指针?