放置模板化的std :: array <std :: vector <t>,N&gt;在构造函数初始化列表中

时间:2015-10-01 10:51:38

标签: c++ arrays templates c++11

我有一个包含std::array<std::vector<T>, N> data_成员的模板类。

目前,我可以用

构建它
template<typename T, size_t N>
class A
{
public:
    A(some parameters)
    {
         for (size_t n=0; n<N; n++) {
             data_[n].resize(calculated size from parameters);
         }
    }

private:
    std::array<std::vector<T>,N> data_;
};

是否有一些公式我可以将数组的初始化放在构造函数中?

例如,如果我只使用vector然后使用索引功能,我可以

...
A(some parameters):
    data_(std::vector<T>(N*previous size)) {}
...

2 个答案:

答案 0 :(得分:3)

expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)

https://docs.python.org/2/library/datetime.html#datetime.timedelta

答案 1 :(得分:1)

由于您初始化的主容器是std::array,并且因为它只提供聚合初始化,所以您想要对数组的大小进行参数化,我害怕你不能按照你想要的方式做到这一点。你需要生成一个初始化序列。据我所知,这只有可变参数模板。我试图将一些东西放在一起,但是使用其他答案的方法显然是最好的选择。

另一方面,总是有可能创建一个静态成员函数,在需要时返回数组:

Constructor (bool data) : member(initialiser(data)) {}
static array<vector<T>, N> initialiser(bool data) {
   array<vector<T>, N> container;
  // your code from above
  return container;
}

虽然这是有争议的,并且取决于上下文是否有用。