加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 用’this’指针初始化std :: array

发布时间:2020-12-16 10:37:38 所属栏目:百科 来源:网络整理
导读:我试图在模板类中初始化一个数组,并将this指针传递给数组中的所有元素. 这是我的类可能是这样的: templateint NUM class outer_class;templateint Nclass inner_class { private: outer_classN *cl; public: inner_class(outer_classN *num) { cl = num; }
我试图在模板类中初始化一个数组,并将this指针传递给数组中的所有元素.
这是我的类可能是这样的:

template<int NUM> class outer_class;

template<int N>
class inner_class {
  private:
   outer_class<N> *cl;
  public:
   inner_class(outer_class<N> *num) {
    cl = num;
   }
   void print_num() {
    cl->print_num();
   }

};

template<int NUM> class outer_class {
 private:
  int number = NUM;

  // --> here I basically want NUM times 'this' <-- 
  std::array<inner_class<NUM>,NUM> cl = { this,this,this }; 

 public:

  void print_num() {
    std::cout << number << std::endl;
  }

  void print() {
    cl[NUM - 1].print_num();
  }
};

int main() {
  outer_class<4> t;
  t.print();

  return 0;
}

如何将this指针传递给存储在outer_class数组中的inner_class的所有元素(在C 11中)?

解决方法

首先,你不能在构造函数或任何其他成员函数之外使用这个.在这里,您必须在初始化列表中初始化cl.

将delegating constructor与std::*_sequence一起使用:

template<int NUM> class outer_class {
    ...

    template <std::size_t... Integers>
    outer_class(std::index_sequence<Integers...>) 
    : cl{(static_cast<void>(Integers),this)...}
    {}

public:
    outer_class(/* whatever */) : outer_class(std::make_index_sequence<NUM>{}) {}
};

附注:

>您的打印成员函数应标记为const,因为它们不会修改您的成员.
> cl [NUM – 1] .print_num();你可能想用std::array::back().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读