Есть ли лучший способ создания пользовательских сообщений об ошибках для идеальной пересылки на конструкторы?

У меня есть следующий код C ++ для проверки нашей идеальной пересылки, используемой при делегировании аргументов конструкторам для объектов разных типов:

#include <iostream>

// THIS CLASS TAKES 2 ARGUMENTS.
struct A {
A(int i, int j) {
i = i;
j = j;
}

int i;
int j;
};

// THIS CLASS TAKES 3 ARGUMENTS.
struct B {
B(int i, int j, int k) {
i = i;
j = j;
k = k;
}

int i;
int j;
int k;
};

// THIS CLASS IS A VARIANT-LIKE DELEGATOR
// WHOSE FIRST ARGUMENT IS THE TYPE TAG,
// AND THE REST ARE FORWARDED TO THE CORRESPONDING CLASS.
struct Delegator {
enum class Type : int {
CLASS_A,
CLASS_B
};

union {
A a;
B b;
};

template <typename... Args>
Delegator(Delegator::Type type, Args... args) {
type_ = type;

if (type_ == Delegator::Type::CLASS_A) {
new (&a) A(std::forward(args...));
} else if (type_ == Delegator::Type::CLASS_B) {
new (&b) B(std::forward(args...));
} else {
throw std::invalid_argument("Delegator constructor: ""forwarded arguments does not match any of its member type constructors!");
}
}private:
Delegator::Type     type_;
};

int main() {
// THIS IS GOOD.
Delegator delegator(Delegator::Type::CLASS_A, 1, 2);

// THIS IS BAD.
Delegator delegator(Delegator::Type::CLASS_A, 1, 2, 3, 4);
}

Мне было интересно — каково текущее состояние сообщений об ошибках в C ++ при работе с этими типами случаев? Есть что-нибудь сопоставимое с (syntax-error) средство, предоставляемое со схемой, так что пользователи объекта могут получить лучшее сообщение об ошибке при неподходящий использование? Мне все равно, какой стандарт C ++ используется — Я просто хочу знать, возможно ли в настоящее время настроить диагностические сообщения об ошибках C ++.

Может ли программист сделать что-нибудь с этими сообщениями об ошибках с длинным шаблоном для будущих пользователей? Или все это в руках компилятора?

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector