在静态初始化列表之前预处理变量



我想在将值传递给初始化列表之前做一个预处理活动。

(例如:做断言检查)

我的问题有一些背景:假设我有,

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.    };

what if,第15行;就在之前,我调用初始化列表将b_obj (b_value) -初始化为input_value

我想操纵(做检查或一些预处理)input_value的值??

我如何做到这一点?在Java中,会有类似于初始化块的东西。

我已经想到了-

  1. 创建a类和B类的外部函数,在创建a类的对象之前,用"input_value"初始化它,预处理该值。(然而,这违反了松耦合的概念)

  2. 使父类"a的父类"到类a,使类a扩展它,在该类中做预处理,因为父构造函数在初始化列表之前被调用?我没有尝试过,我不确定这是否是正确的方法。

我通过

使B成为指针,预处理值,然后使用new初始化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.    };

就我理解你的问题而言,我认为你必须尝试在a的构造函数中操纵输入,然后从该构造函数调用具有该输入的b的构造函数。

在函数中执行!

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

另外,我没有初始化a_value,因为您应该删除它。

最新更新