当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 一种通用的C++类或者结构成员变量的初始化方法

一种通用的C++类或者结构成员变量的初始化方法

2017年12月21日  | 移动技术网IT编程  | 我要评论

1234网址,服装数码印花机,北京哪里做双眼皮

一种通用的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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网