在构造函数中初始化const数组

时间:2016-06-22 09:42:45

标签: c++ arrays c++11

我正在努力实现这样的目标

struct A {
    A(const int (&arr)[5])
      :  arr_(arr)
    {}

    const int arr_[5];
}

显然这不起作用。我的意图是保持arr_字段不变。实现这一目标的最佳方法是什么(可以是C ++ 11)?

3 个答案:

答案 0 :(得分:5)

使用std::array

struct A {
    A(std::array<int, 5> const& arr)
      :  arr_(arr)
    {}

    std::array<int, 5> const arr_;
}

答案 1 :(得分:2)

使用转发构造函数:

struct A {
    A(const int (&arr)[5]) : A(arr, std::make_index_sequence<5>()) {}

    const int arr_[5];
private:
    template <std::size_t ... Is>
    A(const int (&arr)[5], std::index_sequence<Is...>)
      : arr_{arr[Is]...}
    {}
};

答案 2 :(得分:1)

您可以在内部使用std :: array并转换数组:

@Override
public boolean dispatchTouchEvent(MotionEvent ev){
   if(ev.getAction()==MotionEvent.ACTION_MOVE){
      return true;
   }return super.dispatchTouchEvent(ev);
}

但是,如果您可以自由修改A类接口,请使用@ecatmur的答案。