Вы можете использовать JSON.stringify (ваш объект, null, 2) Второй параметр может использоваться как функция замены, которая принимает ключ и Val как параметры. Это можно использовать, если вы хотите что-то изменить в своем объекте JSON .
Вы можете создать «конструктор переадресации» для вашего производного класса:
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&&...>
, но я бы не стал беспокоиться.
К сожалению, это правила языка, если у вас есть делегирующий конструктор , он должен быть единственной частью списка инициализаторов.
Вам нужно обойти это ограничение, например, путем дублирования списка инициализатора конструктора по умолчанию:
SUB(const int b) : BASE(b), c(b), d(c + 3) {}