litb «правильный путь» и необходим для сложных вещей, но что-то вроде этого может быть достаточно хорошим. Добавьте неприкосновенность частной жизни и дружбу по вкусу.
struct PlusOne
{
PlusOne(int i) : i_(i) { }
int i_;
};
std::ostream &
operator<<(std::ostream &o, const PlusOne &po)
{
return o << (po.i_ + 1);
}
std::cout << "1 + 1 = " << PlusOne(num2); // => "1 + 1 = 2"
В этом простом примере создание и потоковая передача временного объекта выглядит не намного полезнее, чем определение функции plusOne (), как уже было сказано. Но предположим, что вы хотели, чтобы он работал следующим образом:
std::ostream &
operator<<(std::ostream &o, const PlusOne &po)
{
return o << po.i_ << " + 1 = " << (po.i_ + 1);
}
std::cout << PlusOne(num2); // => "1 + 1 = 2"