yılında iplik std için? Örneğinreferans olarak nesneyi Geçme :: C++ 11
aşağıdaki snippit bir derleme hatası verir:
#include <iostream>
#include <thread>
using namespace std;
static void SimpleThread(int& a) // compile error
//static void SimpleThread(int a) // OK
{
cout << __PRETTY_FUNCTION__ << ":" << a << endl;
}
int main()
{
int a = 6;
auto thread1 = std::thread(SimpleThread, a);
thread1.join();
return 0;
}
Hata:
In file included from /usr/include/c++/4.8/thread:39:0,
from ./std_thread_refs.cpp:5:
/usr/include/c++/4.8/functional: In instantiation of ‘struct std::_Bind_simple<void (*(int))(int&)>’:
/usr/include/c++/4.8/thread:137:47: required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(int&); _Args = {int&}]’
./std_thread_refs.cpp:19:47: required from here
/usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<void (*(int))(int&)>’
typedef typename result_of<_Callable(_Args...)>::type result_type;
^
/usr/include/c++/4.8/functional:1727:9: error: no type named ‘type’ in ‘class std::result_of<void (*(int))(int&)>’
_M_invoke(_Index_tuple<_Indices...>)
^
Ben bir işaretçi geçirmeden değiştirdik, ancak daha iyi bir çalışma etrafında var mı?
yakalama, mantıklı, varsayılan değerine göre yakalamak için. Eğer referans hedef hala geçerli olmasını sağlamak için sorumluluk belirtmek için bir şey var ki açıkça bu davranış için sormak gerekir. –
Mükemmel! Ben açıkça bir başvuru iletmek için bir yol olduğunu umuyordum. C++ 11 tekrar kurtarma için :) – austinmarton