【发布时间】:2014-01-28 09:24:59
【问题描述】:
我正在尝试存储一个函数以供以后调用,这是一个 sn-p。
这很好用:
void RandomClass::aFunc( int param1, int param2, double param3, bool isQueued /*= false */ )
{
/* If some condition happened, store this func for later */
auto storeFunc = std::bind (&RandomClass::aFunc, this, param1, param2, param3, true);
CommandList.push( storeFunc );
/* Do random stuff */
}
但是,如果 RandomClass 是静态的,那么我相信我应该这样做:
void RandomClass::aFunc( int param1, int param2, double param3, bool isQueued /*= false */ )
{
/* If some condition happened, store this func for later */
auto storeFunc = std::bind (&RandomClass::aFunc, param1, param2, param3, true);
CommandList.push( storeFunc );
/* Do random stuff */
}
但这不起作用,我得到编译错误
错误 C2668: 'std::tr1::bind' : 对重载函数的模糊调用
任何帮助表示赞赏。
【问题讨论】:
-
RandomClass::aFunc是否存在不止一个重载? -
我也可以这样做,这适用于普通类,但不适用于静态版本。 CommandList.push( [=] () { aFunc(param1, param2, param3, true); });
-
是的,还有第二个 ::aFunc 具有不同的参数。与我尝试使用的函数相比,另一个函数使用字符串并且参数更少。
-
好的,我找到了一个副本。我希望它会有所帮助。底线是您必须转换为正确的重载类型。
标签: c++ visual-studio-2010 c++11