【问题标题】:Create custom operator c++创建自定义运算符 c++
【发布时间】:2014-08-26 19:05:28
【问题描述】:

我想问一下是否可以在 C++ ex.中定义自定义运算符:

Func function;
double a[2] = {-3, 3};
function = function integrate a;

注意:integrate 是区间 上数值积分的运算符。

我真正感兴趣的只是如何创建自己的运算符。

感谢您的回复和时间。 马里

【问题讨论】:

  • 该语言不允许您引入新的运算符符号,并且使用现有的符号之一来做不同的事情可能会令人困惑(但它已经完成了。)
  • 你可以搜索 Yakk 的命名运算符方法。它看起来像这样:function <integrate> a,或类似的function *integrate* a。但恕我直言,integrate(function, a) 看起来也不错。
  • 我在网上发现这是可能的。但我不知道怎么做。例如,我找到了库 link。但是我不明白创建自定义运算符的原理。
  • @user47779:它似乎在使用 Yakk 的命名运算符,隐藏在宏后面
  • @MooingDuck Yakk 的命名操作员?你有这个链接吗?

标签: c++ operators


【解决方案1】:

你为什么不为你的集成方法写一个类(也许是一个完整的类层次结构)或者一个函数也足够了。然后给它你想要集成的函数作为参数(使用std::function 将允许它成为函数指针、仿函数或 lambda 表达式)和你的集成范围。这就是我最近这样做的方式。以一维为例:

#include <functional>
#include <iostream>

double integrate(std::function<double(double)> f, double a, double b)
{
    return (b-a)/2.0*(f(a)+f(b));
}

int main()
{
    std::cout << integrate([](double x){ return x*x;}, -3.0, 3.0) << std::endl;
    return 0;
}

【讨论】:

    【解决方案2】:

    您不能创建迭代运算符。您可以创建一个函数来集成

    #include <functional>
    typedef std::function<double(double)> Function;
    
    double integrate(Function func, double a[])
    {
        double result = 0.0;
        //do numeric integration
        return result;
    }
    double my_func(double x)
    {
        return x * x;
    }
    int main()
    {
        double a[] = {-3.0, 3.0};
        const double result = integrate(my_func, a);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您不能定义自定义运算符。 您只能更改现有含义的含义。 但优先级和分组保留原样。

      【讨论】:

      • 你永远不应该做的是使用宏预处理器将集成定义为 * 然后重载它... ;=)
      • 请注意,如果您重载任何布尔运算符,则会丢失短路评估。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2014-08-21
      • 2021-06-01
      • 2023-03-23
      • 2022-07-06
      • 2015-05-09
      相关资源
      最近更新 更多