Han*_*ans 1 c++ templates functor
请考虑以下设置:
我有一个界面
template<class T>
void FooClass<T>::foo(boost::function<double (int)> f)
{...}
Run Code Online (Sandbox Code Playgroud)
我想使用Functor实现f:
class MyFun {
public: double operator()(int a) {do something...;}
}
Run Code Online (Sandbox Code Playgroud)
但是,界面中定义了另一个功能
template<class T>
template <class FunPtr>
void FooClass<T>::foo(const FunPtr& f)
{...}
Run Code Online (Sandbox Code Playgroud)
调用FooClass对象时
MyFun f;
FooClass<double> fooclass;
fooclass.foo(f);
Run Code Online (Sandbox Code Playgroud)
它使用第二个定义,而我希望它调用第一个定义 - 这可以以某种方式改变吗?
编译器"preferres"的第二个定义,因为模板版本导致一个确切的函数对象参数匹配,而boost::function参数需要的隐式转换被接受(和隐式转换被认为是后直接过载分辨率).你可以通过构造一个boost::function对象,然后将它传递给函数来实现你想要的东西(注意你可以在同一行中执行此操作,为了清楚起见,我只是单独进行):
boost::function<double (int)> bMyFun(myFunInstance);
fooClassInstance.foo(bMyFun);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |