C++:使用具有不同运算符和类方法的相同函数布局

标签 c++ function templates member

我有一个像下面这样的功能布局:

bool foo( object1, object2, method_x, op_y, method_z ) {
    if (object1.method_x() op_y object2.method_z()) {
        do something;
}

对象 object1 和 object2 总是来自同一个类。但是它们的方法和中间的运算符是任意的。我知道您可以将运算符作为模板参数传递,这样就可以完成工作。但是成员函数呢?如果有帮助,他们不接受任何争论。

最佳答案

如果您想避免打字,宏是这里常用的(邪恶的)机制。

在 C++1y 中,您可以使用多态 lambda 来实现类似的功能。

foo(object1, object2, 
      [](auto o) { return o.method_x(); }, 
      [](auto a, auto b) { return a == b }, 
      [](auto o) { return o.method_z() });

当然只要方法是这样就可以

foo(object1, object2, 
      std::memfn(&Object1::method_x),
      [](auto a, auto b) { return a == b }, 
      std::memfn(&Object2::method_z));

更新:由于您添加了可以限制类型的内容,因此您可以将所有 auto 替换为适当的类型并可能使用

template <typename T, typename Mx, typename Op, typename Mz>
bool foo(T& object1, T& object2, Mx method_x, Op op_y, Mz method_z ) {
    if (op_y(method_x(object1), method_z(object2)) {
        // do something;
}

关于C++:使用具有不同运算符和类方法的相同函数布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398714/

相关文章:

c++ - 具有多次调用的可替换方法的类

javascript - 在 Javascript 中通过 onclick 事件调用的函数中使用此函数

swift - 使用 Swift 枚举减少函数中的参数数量

django 中间件设置用户特殊全局变量

c++ - 为什么我不能在函数内部声明模板化类型别名?

c++ - 抛出析构函数导致内存泄漏

c++ - 具有不同数量参数的函数调用

c++ - Clang 访问修饰符顺序和 decltype

c++ - 无法启动程序,访问被拒绝

c++ - 方法/构造函数及其返回值