假設我想throw
包含關於某個對象的信息的字符串,但對象實現只有流運算符(<<
)的重載,而不是轉換爲字符串。我想要做這樣的事情:我可以在沒有流對象的情況下調用流操作符重載嗎?
throw std::runtime_error("Error, encountered invalid value " + x);
其中x
是超載具有類型(<<
)的一個實例。但是,上述不起作用,因爲+
未超載爲與const char*
兼容的類型。如果x
是一個字符串(或強制轉換爲字符串),它的工作,而是我必須這樣做:
std::stringstream s;
s << "Error, encountered invalid value " << x;
throw std::runtime_error(s.str());
我怎樣才能儘量精簡的第一個例子。在沒有添加任何過載或自定義的功能。標準庫是否提供了一些有用的功能?
超載'運營商+(的std :: string&,X)' – 101010
能不重載+爲對象添加一個字符串? – MiltoxBeyond
@MiltoxBeyond我可以,但我問這個問題,看看是否有可能做到這一點,而不寫任何新的功能/重載。 – arman