ben gibi auto
kullanabilirsiniz varsayılan argümanı ile lambda işleve bir std :: işlev değişkeni ayarlamak için yapı. Bir yapıda auto
kullanamıyorum.Bir std :: function değişkenini varsayılan argümanlarla nasıl tanımlamalıyım? Bu 10.</p> <p>yazdırır</p> <pre><code>auto foo = [](int x = 10){cout << x << endl;}; foo(); </code></pre> <p>Ama foo değişkeni bir ikamet istiyorum:
std::function<void(int x)> foo = [](int x = 10){cout << x << endl;};
foo(); //error: no match for call to ‘(std::function<void(int)>)()’
: std :: fonksiyonlu auto
değiştirilmesi
struct Bar
{
std::function<void(int x = 10) foo = [](int x = 10}(cout << x << endl}; //error: default arguments are only permitted for function parameters
};
Bar bar;
bar.foo();
veya yapı olmadan
struct Bar
{
std::function<void(int) foo = [](int x = 10}(cout << x << endl};
};
Bar bar;
bar.foo(); //error: no match for call to ‘(std::function<void(int)>)()’
ve std :: fonksiyonu için auto
değiştirilmesi
struct Bar
{
auto foo = [](int x = 10}(cout << x << endl}; //error: non-static data member declared ‘auto’
};
Bar bar;
bar.foo();
Peki nasıl foo ilan etmeliyim?
Varsayılan argümanlarla 'std :: function' yapmanın bir yolu yoktur. –