我想要做的伪代码是:
function<bool(int)> getFunc(type) // get a function depending on what type is passed
问题是返回的函数必须声明为static?结果,我无法访问对象属性。所以我需要将它们传递给函数?因此,要返回的原始函数可能如下所示:
bool func1(int)
bool func2(int)
现在需要注入运行所需的其他对象/参数......
bool func1(int, Class1)
bool func2(int, Class2)
那么如何定义getFunc
的返回类型?或者也许是更好的方式?
更新
在上文中,func*
函数实际上是:has*()
。例如。
hasStmtsUsing(variable)
hasVariablesUsed(stmt)
为了确定条件是否为真,它使用一个对象,例如。 uses
。然后还有其他类似的has*()
函数,例如使用对象hasStmtsModifying(variable)
的{{1}}。 modifies
和uses
是不同类型的对象,最初它们是对象成员,因此不需要传入。现在由于函数是modifies
,它们需要传入。
在写这篇文章时,我在想我需要的是某种依赖注入器?也许我传入static
并致电DI
函数?
答案 0 :(得分:1)
也许我误解了一些东西,但是你不需要使用成员函数来绑定()第一个参数吗?
class X {
bool f1(int);
bool f2(int);
};
X x;
function<bool(int)> f = bind(&X::f1, &x);
答案 1 :(得分:0)
这是一个如何在C ++ 11中使用lambdas完成的例子:
#include <cassert>
#include <functional>
#include <iostream>
struct Class1 {
};
struct Class2 {
};
bool func1(int,Class1)
{
return true;
}
bool func2(int,Class2)
{
return false;
}
inline std::function<bool(int)> getFunc(Class1 obj1)
{
return [=](int x){ return func1(x,obj1); };
}
inline std::function<bool(int)> getFunc(Class2 obj2)
{
return [=](int x){ return func2(x,obj2); };
}
int main(int,char**)
{
Class1 obj1;
std::function<bool(int)> f1 = getFunc(obj1);
Class2 obj2;
std::function<bool(int)> f2 = getFunc(obj2);
assert(f1(0)==true);
assert(f2(0)==false);
return 0;
}