Вы не можете добавить дополнительные параметры к operator<<
, но вы можете легко определить пользовательскую функцию печати, принимая параметр подробность :
void dump(ostream& ostr, const myClass& obj, int verbosity = 1)
{
if (verbosity > 2)
ostr << "Very verbose!\n";
if (verbosity > 1)
ostr << "Verbose!\n";
if (verbosity > 0)
ostr << "Standard!\n";
ostr << "Minimal.\n";
}
Использование:
dump(cout, myobj); // Default
dump(cout, myobj, 0); // Minimal
dump(cout, myobj, 1); // Default
dump(cout, myobj, 2); // Verbose
dump(cout, myobj, 3); // Very verbose
Вы должны также обеспечить переадресацию оператора потока на dump()
, используя многословность по умолчанию:
ostream& operator<<(ostream& ostr, const myClass& obj)
{
dump(ostr, obj);
return ostr;
}
Если вы хотите пойти по этому пути, было бы неплохо объявить enum
для многословия вместо использования int
s:
enum Verbosity
{
MinimalOutput = 0,
StandardOutput = 1,
VerboseOutput = 2,
DebugOutput = 3
};