2014-03-25 86 views
0

我想在將值傳遞給初始化列表之前執行預處理活動。在靜態初始化列表之前預處理變量

(例如:做斷言檢查)

下面是一些方面我的問題:假設我有,

1. class B { 
2. private: 
3.   int b_value; 
4. public: 
5.   B(int input_of_b) { 
6.    b_value = input_of_b; 
7.  } 
8. }; 

9. 
10. class A { 
11. private: 
12.  int a_value; 
13.  B b_obj 
14. public: 
15.   A(int input_value) : b_obj(input_value) { 
16.    //A constructor gets called after init list happens 
17.  } 
18. }; 

什麼,如果在15行; 只是之前我叫初始化列表來初始化b_obj (b_value) - 到將input_value

我想操縱(做檢查或一些預處理)將input_value的價值?

我該如何做到這一點?在Java中 - 會有像初始化塊那樣的東西。

我已經想到了 -

  1. 製作功能的外部A類和B,以及之前創建的對象,並以「將input_value」,預處理該值初始化。 (然而,這違反了鬆耦合的概念)

  2. 爲類A做一個父類「A的父類」,讓類A擴展它,在該類中做預處理,因爲在初始化列表之前調用父構造函數?我沒有嘗試過,我不確定這是否是正確的方法。

+1

您可能有一個staitic成員函數int preprocess(int)並通過b_obj(預處理(輸入))初始化 –

+1

聽起來像它應該是'B'的責任來保持該int的正確值。那麼爲什麼不在B的構造函數中做呢? – jrok

+0

@jrok,這可能不總是可能的,特別是如果它是庫的一部分,例如 – gldraphael

回答

0

據我理解你的問題,我想你必須設法操縱在的構造函數的輸入,然後從構造函數調用B的與該輸入構造函數。

1

我解決了這個由

使B中的指針,在析構函數預處理值,然後使用新的初始化B對象,然後釋放內存

10. class A { 
11. private: 
12.  int a_value; 
13.  B* b_obj 
14. public: 
15.   A(int input_value) { 
16.   //preprocess input_value here 
17.   b_obj = new B(input_value); 
18.   } 
19.   ~A(){ 
20.   delete b_obj; 
21.   } 
22. }; 
0

待辦事項它在一個功能!

int b_validate(int); 

A::A(int input_value) 
    : b_obj(b_validate(input_value)) 
{} 

而且,我不會初始化a_value因爲你應該改爲移除它。