在现代 C++ 中,可以使用 lambda 传递任何运算符。
更新 1:提议的解决方案引入了 @HolyBlackCat 建议的小改进
#include <iostream>
template<class T, class F> void reveal_or(T a, T b, F f)
{
// using as function(a, b) instead of expression a || b is the same thing
if ( f(a, b) )
std::cout << a << " is || " << b << std::endl;
else
std::cout << a << " is not || " << b << std::endl;
}
template<class T> void reveal_or(T a, T b)
{
// reuse the already defined ||
reveal_or(a, b, [](T t1, T t2) {return t1 || t2; });
}
如果 || 不用担心如何传递参数 运算符已定义
int main ()
{
reveal_or('1', 'a');
return 0;
}
作为参数显式传递。我们可以传递任何东西,包括任何异国情调的废话
int main ()
{
//same as above:
reveal_or('1', 'a', [](char t1, char t2) { return t1 || t2; });
//opposite of above
reveal_or('1', 'a', [](char t1, char t2) { return !( t1 || t2; ) });
return 0;
}