В C ++ использование оператора << для создания ввода для функции - PullRequest
0 голосов
/ 11 апреля 2011

Я хотел бы иметь возможность написать код, который выглядит следующим образом:

int n;
std::string s = "some string";
SomeFunction("hello world" << n << " " << s << std::endl);

Где SomeFunction () - это метод другого класса. Дело в том, что я хотел бы иметь возможность создавать ввод для определенного метода, используя operator <<, так же, как это делалось бы при записи в стандартный вывод в C ++. Как я могу это сделать? </p>

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Ваш первый параметр должен быть домашнего типа, который перегружает operator<< и создает какой-то список параметров.

Ваш класс, вероятно, будет содержать ostream и перенаправит operator<< на него.

Если функция принимает строку, а не ваш таинственный объект построения строк, вам потребуется преобразовать ваш объект обратно в строку.

Вы можете сделать это с ostringstream так:

int n;
std::string s;
std::ostringstream oss;
SomeFunction( ( oss << "hello world " << n << " " << s << '\n' ).str() );
0 голосов
/ 11 апреля 2011

Спасибо, но это решение слишком очевидно.Я ищу код, чтобы остаться таким же, как в примере.- Александр Сандлер 54 секунды назад

Удивительный уклон против очевидных решений?

Ваш синтаксис просто не может быть достигнут (в общем случае [1]) без макроса, который вы описали в первом комментарии.Период.

[1] В некоторых случаях вы можете решить проблему путем перегрузки до ostream& operator<<(std::string, myspecifictype).На практике это не даст вам ничего, кроме головной боли, потому что почти каждое использование оператора << впоследствии приведет к неоднозначным разрешениям перегрузки </p>

...