Kopyalama yoluyla bir const nesnesini (değiştirilebilen) lambda içinde yakalamaya çalışıyorum. Ancak derleyicim, yakalanan nesnenin const olduğunu şikayet ediyor.Kopyalanamayan lambda kapamasında kopyalanmış const nesnesi
Nesneyi const olmayan olarak kopyalamak mümkün olmaz mı?
testcase.cpp: In lambda function:
testcase.cpp:10:29: error: no matching function for call to ‘Foo::Func() const’
testcase.cpp:10:29: note: candidate is:
testcase.cpp:4:7: note: void Foo::Func() <near match>
testcase.cpp:4:7: note: no known conversion for implicit ‘this’ parameter from ‘const Foo*’ to ‘Foo*’
3.1 ++ clang derleme: g ++ 4.7.2 derleme
struct Foo
{
Foo(){}
void Func(){}
};
int main()
{
const Foo foo;
[foo]() mutable { foo.Func(); };
}
testcase.cpp:10:20: error: member function 'Func' not viable: 'this' argument has type 'const Foo', but function is not marked const
std::async([foo]() mutable { foo.Func(); });
standart belgesi (ya da daha doğrusu taslak ...) 5.1.2.14 olarak tanımlar "[...] tipi, karşılık gelen yakalanmış varlığın türü" dir, bu yüzden cv-belirtecilerini içerecektir.
Ancak sezgisel görünmüyor.
Açıkça lambda bedeninizin içine kopyalayabilirsiniz ama sanırım aradığınız şey bu değil. Tabii ki, C++ 11 verilen parametre olarak r-değeri referansı alabilirdiniz. – CashCow
Soru nedir? – chill
@chill Bu soru şudur: neden kopyalanmış foo nesnesi lambda içinde const nedir? –