将运算符作为参数传递

nac*_*o4d 26 c c++ parameters operator-keyword

我想要一个评估2个bool变量的函数(比如真值表)

例如:

以来

T | F:T

然后

myfunc('t', 'f', ||);  /*defined as: bool myfunc(char lv, char rv, ????)*/
Run Code Online (Sandbox Code Playgroud)

应该回归真实;

我怎么能传递第三个参数?(我知道可以将它作为char*传递但是我必须有另一个表来比较运算符字符串,然后执行我想避免的操作)

是否可以在函数/方法中传递^(XOR)或||(OR)或&&(AND)等运算符?

提前致谢

ybu*_*ill 26

限定:

bool myfunc(char lv, char rv, boost::function<bool(bool,bool)> func);
Run Code Online (Sandbox Code Playgroud)

如果你有提升,或者

bool myfunc(char lv, char rv, std::function<bool(bool,bool)> func);
Run Code Online (Sandbox Code Playgroud)

如果你有C++ 0x编译器,或者

template<class Func> bool myfunc(char lv, char rv, Func func);
Run Code Online (Sandbox Code Playgroud)

如果你想让它成为一个模板.然后你可以打电话:

myfunc('t', 'f', std::logical_or<bool>());
Run Code Online (Sandbox Code Playgroud)

  • 只是认为包含更多函数对象的链接会很有帮助,例如std :: logical_or http://www.cplusplus.com/reference/std/functional/ (4认同)
  • @Patrick:`myfunc`返回`bool`,所以它不能返回`4`。还有 `'1' == 49` 和 `'3' == 51`,所以我期望的答案是 `100 == 'd'`。 (2认同)

Kar*_*nek 5

@ybungalobill发布了一个C++正确答案,你应该坚持下去.如果你想传递运算符,函数将不起作用,但宏将完成工作:

#define MYFUNC(lv, rv, op) ....

// Call it like this
MYFUNC('t', 'f', ||);
Run Code Online (Sandbox Code Playgroud)

小心,宏是邪恶的.