Обходной путь для наследуемого конструктора и дополнительных переменных

Вы можете использовать JSON.stringify (ваш объект, null, 2) Второй параметр может использоваться как функция замены, которая принимает ключ и Val как параметры. Это можно использовать, если вы хотите что-то изменить в своем объекте JSON .

2
задан Markus Hanel 13 July 2018 в 07:54
поделиться

2 ответа

Вы можете создать «конструктор переадресации» для вашего производного класса:

struct SUB: public BASE {
    const int c;
    const int d;

    template <class... T>
    SUB(T&&... a) : BASE(std::forward<T>(a)...), c(b), d(c + 3) {}
};

Это будет принимать произвольные аргументы и перенаправлять их на BASE. Конечно, он будет компилироваться только при вызове с аргументами, которые действительны для BASE, но это выполняется для каждого случая.

Если вы хотите / должны быть суперправильными, вы можете установить конструктор, используя SFINAE на что-то вроде std::is_constructible<BASE, T&&...>, но я бы не стал беспокоиться.

2
ответ дан Angew 17 August 2018 в 13:23
поделиться

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

Вам нужно обойти это ограничение, например, путем дублирования списка инициализатора конструктора по умолчанию:

SUB(const int b) : BASE(b), c(b), d(c + 3) {}
2
ответ дан Some programmer dude 17 August 2018 в 13:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: