一種通用的C 類或者結構成員變數的初始化方法

2021-08-02 17:57:18 字數 1256 閱讀 3992

c++11提供了新的特性,可以初始化一些類或者結構成員變數,尤其某類例項化的變數的初始化,下面介紹一種在c++98中也可以初始化類成員變數的通用方法:

先上**

#include 

#include

template

struct ca

const t operator(int idx) const

int length;

int item_size;

};struct cb

;int main()

這段**一定編譯不過,因為

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]'

forarray subscript

std::cout << "cb[5] = "

<< cb.ca[5] << "\n";

^

在c++11中,可通過

caca =10;

來解決這一問題。下面介紹另外一種方法,就是通過模板初始化來解決,在c++98中也能相容

#include 

#include

template

<

typename t=bool,

int init_array_size = 0>

struct ca

ca(int init_size):length(0), item_size(init_size){}

const t operator(int idx) const

int length;

int item_size;

};struct cb

;int main()

主要的改動在

ca template中加入init_array_size 模板引數

ca的無引數建構函式的實現

成員變數ca的型別改為ca

C 呼叫lua函式的一種通用辦法

在c 中呼叫lua函式的一般方式如下 如果有很多個指令碼函式需要呼叫,按上面的方式就要寫很多個與之對應的c 函式,當然也可以利用c 的過載,把函式名作為引數,每種引數組合實現乙個過載函式,則上面的 可以改為 如果有兩個不同的lua函式,它們的引數是一樣的,則可以共用同乙個common call,但是...

C 類標頭檔案不暴露私有變數的一種寫法

在類的標頭檔案中不暴露私有變數,目的一般有兩個 1.提供給別人的dll對應的標頭檔案中,不希望在標頭檔案中暴露私有變數的名稱 2.因為私有變數的型別需要包含另乙個標頭檔案,所以不希望在標頭檔案中包含其它標頭檔案 一般可以用下面的方法來隱藏私有變數。twebsocketserver.h class t...

計算結構體成員偏移位址的一種方法

同事說起的 個人想了一下 還真沒什麼思路 後學習了一下 附 於下 很簡便的一種方式 int tmain int argc,tchar argv mystruct st mystruct 0 int address int st m test printf lld r n st return 0 一直...