Предварительная обработка переменной перед статическим списком инициализации

Я хочу выполнить предварительную обработку, прежде чем передать значение в список инициализации.

(например: сделать проверку утверждений)

Вот некоторый контекст моего вопроса: предположим, у меня есть,

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 ??

Как мне этого добиться?
В Java — что-то вроде блока инициализации.

Я уже думал о —

  1. Создание функции, внешней по отношению к классам A и B, и непосредственно перед созданием объекта A и инициализация его значением «input_value», предварительно обработайте это значение. (Однако это нарушает концепцию слабой связи)

  2. Сделав родительский класс «родительским классом А» для класса А, сделайте так, чтобы класс А расширил его, выполните предварительную обработку в этом классе, так как родительский конструктор вызывается перед списком инициализации? Я не пробовал это, и я не уверен, что это правильный подход.

0

Решение

Я решил это

создание B указателя, предварительная обработка значения, а затем инициализация объекта B с использованием new, а затем освобождение памяти в деструкторе

то есть

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

Другие решения

Насколько я понимаю ваш вопрос, я думаю, что вы должны попытаться манипулировать вводом в конструкторе a, а затем вызывать конструктор b этого конструктора с этим вводом.

0

Сделай это в функции!

int b_validate(int);

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

Кроме того, я не инициализирую a_value потому что вы должны удалить его вместо этого.

0
По вопросам рекламы [email protected]