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

标签 c++ c-preprocessor initialization-list static-block

我想在将值传递给初始化列表之前进行预处理事件。

(例如:做断言检查)

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

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 中 - 会有类似初始化 block 的东西。

我已经想到了-

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

关于c++ - 在静态初始化列表之前预处理变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636334/

相关文章:

printing - 是否有一种可移植的方法来打印来自 C 预处理器的消息?

c++ - 直接从 std::istream 读取到 std::string

c++ - C++ 中的 C 字符串删除

c++ - 使用 Bresenham 的直线算法绘制直线

c++ - 变量名中的 __COUNTER__

c# - 使用反射在构造函数中初始化(列表)属性

c++ - 'boost::Q_FOREACH' 尚未声明

c++ - 如何在各个参数中拆分#__VA_ARGS__

c++ - C++何时查找初始化列表

c++ - 在这种特定情况下,使用成员初始值设定项列表和在构造函数中赋值有区别吗?