7
Std :: yer tutucularını kullanarak işlevin aritliğini açıkça bilmem/belirtmek zorunda kalmadan bir fonksiyonun ilk argümanını bağlayan bir fonksiyona sahip olmak istiyorum BindFirst
. Müşteri kodunun böyle bir şey görmesini isterim.işlevinin ilk argümanını, onun nesnesini bilmeden bağla
#include <functional>
#include <iostream>
void print2(int a, int b)
{
std::cout << a << std::endl;
std::cout << b << std::endl;
}
void print3(int a, int b, int c)
{
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
}
int main()
{
auto f = BindFirst(print2, 1); // std::bind(print2, 1, std::placeholders::_1);
auto g = BindFirst(print3, 1); // std::bind(print3, 1, std::placeholders::_1, std::placeholders::_2);
f(2);
g(2,3);
}
BindFirst
nasıl uygulanabilir? C++ 11'inde
Ben std :: decay' neden 'bilebilir Kullanılmış? – billz
@billz Burada, BindFirst'e iletilen argümanların kopyalarını (muhtemelen hareket ettirilmiş) saklamak istiyoruz. Kesinlikle referansları saklamak istemiyorsunuz, onların nezaketleri/uçuculuğu ilginizi çekmiyor. 'T' için 'T && = int && 'saklamak istediğinizi söyleyin –