一种通用的C++类或者结构成员变量的初始化方法
程序员文章站
2022-03-19 20:23:09
一种通用的C++类或者结构成员变量的初始化方法
C++11提供了新的特性,可以初始化一些类或者结构成员变量,尤其某类实例化的变量的初始化,下面介绍一种在C++98中也可以初始化类...
一种通用的C++类或者结构成员变量的初始化方法
C++11提供了新的特性,可以初始化一些类或者结构成员变量,尤其某类实例化的变量的初始化,下面介绍一种在C++98中也可以初始化类成员变量的通用方法:
先上代码
#include #include template struct CA { CA(int init_size):length(0), item_size(init_size){} const T operator[](int idx) const { return static_cast(idx*idx); } int length; int item_size; }; struct CB { CA ca(10); }; int main() { CB cb; std::cout << "cb[5] = " << cb.ca[5] << "\n"; return 0; }
这段代码一定编译不过,因为
main.cpp:23:16: error: expected identifier before numeric constant CA ca(10); ^~ main.cpp:23:16: error: expected ',' or '...' before numeric constant main.cpp: In function 'int main()': main.cpp:29:39: error: invalid types '[int]' for array subscript std::cout << "cb[5] = " << cb.ca[5] << "\n"; ^
在C++11中,可通过
CA ca = 10;
来解决这一问题。下面介绍另外一种方法,就是通过模板初始化来解决,在C++98中也能兼容
#include #include template< typename T=bool, int init_array_size = 0> struct CA { CA(): length(0), item_size(init_array_size){} CA(int init_size):length(0), item_size(init_size){} const T operator[](int idx) const { return static_cast(idx*idx); } int length; int item_size; }; struct CB { CA ca; }; int main() { CB cb; std::cout << "cb[5] = " << cb.ca[5] << "\n"; return 0; }
主要的改动在
CA template中加入init_array_size 模板参数 CA的无参数构造函数的实现 成员变量ca的类型改为CA