문자열 스트림을 파생 시켜서 연산자 < <을 사용하여 던져 질 메시지를 만들 수 있습니다. 이것은streambuf 또는 basic_ostringstream을 파생 하시겠습니까?
throw "some text more text 42"
을해야
error("some text") << " more text " << 42 << std::endl;
그래서 내가 한 것은 (어떤이 '오버 플로우'방법 과부하 (streambuf의 상속)을 errorbuf을 한 다음 ostream에를 만들 수 있습니다 : 같은 API를 보일 것이다 & errorbuf). , 당신이 당신처럼 문자열을 던져 안
class error_builder
{
public:
error_builder(const std::string& pMsg = "")
{
mMsg << pMsg;
}
~error_builder(void)
{
throw std::runtime_error(mMsg.str());
}
template <typename T>
error_builder& operator<<(const T& pX)
{
mMsg << pX;
return *this;
}
private:
std::stringstream mMsg;
};
error_builder("some text") << " more text " << 42 << std::endl;
참고 : 내가 대신 basic_ostringstream 또는 무언가를 상속 안하면 내가
경우에 따라 매크로가 최상의 솔루션입니다. –