指针重载函数
根据您所包含的内容标题,有以下几点:
template<class T> complex<T> sin (const complex<T>&); // <complex>
template<class T> valarray<T> sin (const valarray<T>&); // <valarray>
float sin(float); // <cmath>
long double sin(long double); // <cmath>
正如你所看到的,有所涉及模板,尽管这实际上这里并不严格相关。
您只需告知编译器,[潜力]你想(可能只是出后两者的)过载:
std::thread((float(*)(float))&std::sin, 2.9);
如果你想避免C-投,适当的C++投是'static_cast' 。 –
@MatthieuM .:我不特别(这里完全是多余的;我该怎么办,意外抛弃了常量?),但是谢谢。 –
我更喜欢C++演员阵容,因为演员阵容更加明显,主观,我知道:) –
你可以
typedef double (*sind)(double);
std::thread((sind) std::sin,2.9);
你要投的功能指向右侧过载的类型:
std::thread((float(*)(float))std::sin, 2.9);
我更喜欢lambda解决方案。它读取比包含函数指针的任何东西都要干净得多。它也会比使用函数指针更快,但这通常不重要。
std::thread([](double x) { return std::sin(x); }, 2.9);
我认为它应该读'return std :: sin(x);' –
看到http://stackoverflow.com/questions/1353757/how-do-i-refer-to-stdsinconst-valarraydouble – sehe