C++动态初始化常量静态 vector

标签 c++ vector static initialization constants

我想将 Foo 类中的 static const std::vector 初始化为 {0, 1, 2, 3, ..., n 其中 n 在编译时根据下面 enum 中的 Last 的值已知。 Foo::all 的目标是包含 Fruit 枚举的所有值。

foo.h中:

enum Fruit { Apple, Orange, Banana, ..., Last };

class Foo {
public:
    static const vector<int> all;
};

foo.cpp中:

// initialization of Foo::all goes here.

最佳答案

作为第三种选择:

namespace {
  std::vector<int> create();
}
const std::vector<int> Foo::all = create();

create()可以为所欲为,甚至可以使用 push_back()对于每个元素,因为 vector它创建的不是 const。

或者你可以制作create()一个constexpr功能使用 <index_tuple.h>

#include <redi/index_tuple.h>

namespace {
  template<unsigned... I>
    constexpr std::initializer_list<int>
    create(redi::index_tuple<I...>)
    {
      return { I... };
    }
}

const std::vector<int> Foo::all = create(typename redi::make_index_tuple<Last>::type());

关于C++动态初始化常量静态 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105485/

相关文章:

c++ - gcc - 如何自动检测每个基本 block

java - 调用类型变量的基本和派生静态方法

c++ - 忽略 vector C++ 中的空格

arrays - Rust 中不可调整大小的动态长度数组的最佳选择是什么?

c++ - 将 vector 转换为数组 - 是否有 'standard' 方法来执行此操作?

static - 如何强制使用静态库而不是共享?

java - 为什么接口(interface)中的所有字段都是隐式静态和最终的?

c++ - 在 C++ 中,如何引用不同头文件中的函数?

c++ - CMake 错误 : MYSQL_INCLUDE_DIR not found

c++ - 将类型映射到整数值后,如何获得给定整数值的类型?