【发布时间】:2016-10-18 15:01:41
【问题描述】:
我正在写一堆这样的函数:
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());
}
...
拥有一个看起来像这样的可变参数函数/宏也不错:
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, '.');
}
这有可能吗?如果是怎么办?
【问题讨论】:
-
不知道为什么人们投票关闭。答案是肯定的。我会在一秒钟内整理出一个真正的答案。
-
您需要多少个版本?可以向
Error添加更多构造函数吗?就像std::system_error一样。
标签: c++ c++11 variadic-functions variadic-macros