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,因为它们不会修改您的成员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |