在C++中自动绑定boost :: thread?

Eiy*_*uyf 6 c++ boost

做的时候:

std::vector<int> vec;
int number = 4;
boost::thread workerThread(&Method, number, vec)

given a method:
template<typename T>
void Method(int n, std::vector<T> & vec)
{
    //does stuff
}
Run Code Online (Sandbox Code Playgroud)

为什么我必须手动执行:

boost::thread workerThread(&Method, number, boost::ref(vec))?
Run Code Online (Sandbox Code Playgroud)

为什么不通过引用自动传递它?

编辑::所以理论上可以让boost :: thread做一些宏元编程来调整这个,因为C++没有内置反射/内省的方式.

因此,升级/ C++的主要部分通常是传递元信息吗?

Com*_*sMS 3

因为boost::thread对象无法确定 的签名Method

他只知道传入参数的类型,并将它们转发给提供的函数。如果类型不匹配,您会在boost::thread尝试调用该函数的地方收到一条不错的复杂错误消息。

当查看参数的类型时,不可能区分引用传递和值传递,因为它们从调用者的角度来看是相同的。或者从更正式的角度来看:在模板参数推导中将T&衰减到T

boost::ref只有通过在调用方提供显式的方式boost::thread才能正确地将类型识别为引用类型。