Я пишу кучу функций, как это:Упрощая работа с переменным числом функций/макросов
template <>
Error SyntaxError<unfinished_string>(unsigned int line) {
std::stringstream message;
message << "SyntaxError: unfinished string (starting at line " << line << ").";
return Error(Error::Type::syntax, message.str());
}
template <>
Error SyntaxError<malformed_number>(std::string number, unsigned int line) {
std::stringstream message;
message << "SyntaxError: malformed number (" << number << ") at line " << line << '.';
return Error(Error::Type::Syntax, message.str());
}
...
И это не было бы плохо иметь VARIADIC функцию/макрос, который выглядел примерно так:
Error proto(/*variable number & type of arguments*/) {
std::stringstream message;
message << "SyntaxError: " << /*arguments passed, separated by <<s */;
return Error(Error::Type::syntax, message.str());
}
Так что я мог бы написать свои функции как:
template <>
Error SyntaxError<unfinished_string>(unsigned int line) {
return proto("unfinished string (starting at line ", line, ").");
}
template <>
Error SyntaxError<malformed_number>(std::string number, unsigned int line) {
return proto("malformed number (", number, ") at line ", line, '.');
}
Это случайно не возможно? Как, если да?
Не знаете, почему люди голосуют, чтобы закрыть. Ответ - да. Через секунду я соберу реальный ответ. – xaxxon
Сколько версий вам нужно? Можете ли вы добавить дополнительные конструкторы в 'Error'? Подобно ['std :: system_error'] (http://en.cppreference.com/w/cpp/error/system_error/system_error). –