Ala*_*ing 3 c++ static initialization const vector
我想initalize一static const std::vector
类Foo
到{0, 1, 2, 3, ..., n}
哪里n
是在编译时依据的值称为Last
在enum
下面.目标是Foo::all
包含Fruit
枚举的所有值.
在foo.h
:
enum Fruit { Apple, Orange, Banana, ..., Last };
class Foo {
public:
static const vector<int> all;
};
Run Code Online (Sandbox Code Playgroud)
在foo.cpp
:
// initialization of Foo::all goes here.
Run Code Online (Sandbox Code Playgroud)
作为第三种选择:
namespace {
std::vector<int> create();
}
const std::vector<int> Foo::all = create();
Run Code Online (Sandbox Code Playgroud)
并且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());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2674 次 |
最近记录: |