В качестве параметра я бы просто использовал параметр std::string
. Но если вы хотите передать std::istringstream
, вам необходимо передать его явно f
, так как std::istringstream
конструктор, который принимает std::string
is marked explicit (#2). Пример:
f(std::istringstream{"create_customer 1 Ben Finegold"});
Код выше создает временную std::istringstream
в качестве аргумента, который затем перемещается в параметр command
вашей функции; он использует конструктор перемещения № 3 от here.
Обратите внимание, что нам не нужно неуклюжим
f(std::istringstream{std::string{"create_customer 1 Ben Finegold"}});
потому что const char*
конструктор std::string
is not explicit (#5), и компилятор может выполнять не более одного неявного пользовательского преобразования. Поэтому в первой строке кода, которую я разместил, строковый литерал "create_customer 1 Ben Finegold"
преобразуется в std::string
, который затем используется для явного построения временного аргумента std::istringstream
, который затем перемещается в command
.
Итак, вы хотите, чтобы параметр функции 'f (...)' использовался непосредственно для создания локального объекта 'istringstream' в функции' f'. Это то, что вы просите? – Lucien
Я не понимаю, что вы получаете от этого и почему вы это сделаете. Если речь идет о рекурсивных вызовах, почему бы не перегрузить 'f'? –
Конструктор 'istringstream' из' string' является явным, поэтому нет, вы не можете иметь неявное преобразование. Кроме того, 'istringstream' не копируется, вы не можете принять его по значению. Просто возьмите строку. –