【问题标题】:Is there a way to define operators in C++? (or another language)有没有办法在 C++ 中定义运算符? (或其他语言)
【发布时间】:2022-02-20 05:21:39
【问题描述】:

我知道运算符重载,但这不是我要说的。

我用 C++ 做了很多科学计算。例如,我必须计算梯度、点积、拉普拉斯算子、粗麻布算子……

所有这些通常都有明确定义和标准的数学符号。渐变使用 nabla, hessian nabla^2 laplacian \delta ...

我通常必须写vec Gradient(fun_ptr)Hessian(fun_ptr)

问题在于,这会使代码与我正在实施的论文有所偏差,并且当您复制错误时,它会更难被发现。

有没有什么方法可以将 \nabla 字符定义为例如运算符?

【问题讨论】:

  • 现在您可以在函数名称中使用UTF-8 字符(至少在某些编译器上),因此您可以将希腊字母用于函数和/或常量。例如double π = 3.14;
  • 运算符的一个问题是优先级。您不能为新运算符设置优先级,它必须在编译器中进行硬连线。
  • 它可以在 C++ 中完成,这是一个中缀 pwr 运算符。作为一个玩具概念验证,但不是一个严肃的解决方案。这将是非惯用的 C++。还有另一种方式使用macros,同样不推荐用于严重的代码。

标签: c++ compilation operators


【解决方案1】:

有没有办法在 C++ 中定义运算符?

没有。您只能重载(部分)C++ 中自定义类型的现有运算符。

您可以定义实现所需操作的函数,并且如果您将源代码编码为具有这些符号的字符集(即您使用 Unicode),并且您的编译器支持它(由于符号不是基本字符集的一部分),那么您可以使用这些符号作为这些函数的名称。但是你不能在 C++ 中调用带有中缀符号的函数。

(或其他语言)

您可以在 Haskell 中定义中缀函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2012-08-28
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多