void f(int i,const string& s){cout << i << s;}
auto g = bind(f,2,_1);
я получаю сообщение об ошибке, _1 не был объявлен в этой областиОшибка в заполнителе в качестве связующего
void f(int i,const string& s){cout << i << s;}
auto g = bind(f,2,_1);
я получаю сообщение об ошибке, _1 не был объявлен в этой областиОшибка в заполнителе в качестве связующего
Хорошо:
using namespace std::placeholders;
auto g = std::bind(f, 2, _1);
Лучше:
auto h = std::bind(f, 2, std::placeholders::_1);
Лучшие:
auto i = [](auto&& x) { f(2, x); };
Дополнительные бонусные баллы:
auto j = [](auto&& x) {
using type = std::decay_t<decltype(x)>;
f(2, std::forward<type>(x));
};
Я пробовал, но кажется, что в вашем lambdas есть ошибка, параметр объявлен автоматически. Это C++ 14? –
@MiloLu извините, да. это C++ 14. Для C++ 11 вы должны указать тип, в каком случае это будет auto i = [] (const string & x) {f (2, x); }; –
Вы используете пространство имен std :: placeholders? – lauriys
В то же время, если вы используете C++ 11 или выше, вы можете просто начать учиться писать lambdas. В конечном итоге они становятся менее запутанными, ИМО. – AndyG
Это хороший пример, почему его хорошо набирать пространства имен и не использовать. Использование-декларация –