我想知道如何在 C++ 中做一些较低级别的事情,这将允许我做一些“古怪的”数学运算。具体来说,我的两个问题是:
1) 如何定义编译器能够在我的代码中识别的自己的数学符号。换句话说,我不是要解析来自用户的字符串,而是要让编译器将其识别为新的数学运算。
ex: 3 {+} 4 will actually do 3 – 4 etc.
2) 如何从 ASCII 符号定义自定义数字。例如定义编译器识别的符号#为18(即二进制为00010010)。
ex: 18 {+} # = 18 - 18 = 0
如果可能的话,我希望能够在编译器层面完成以上两件事。 C++、Java、C、Python 和 Objective-C 的解决方案都很好。请告诉我您的解决方案使用的语言。谢谢! :)
最佳答案
我在评论中说过,这意味着 C++ 中的宏;如果你想要的并不比你展示的复杂多少,它应该可以解决问题。将运算符定义为宏应该适用于简单的查找/替换情况,但它可能不太适合复杂的表达式和某些符号。
在我看来,我认为通过使用中缀函数作为运算符,您想要的东西在 Haskell 中是可行的,但对于初学者来说可能不是直截了当的。看看Lyah并搜索 infixr
。不过,您需要具备 Haskell 的基本知识。
使用 Zeta 示例编辑,您可以在 ghci
中运行它:
(<+>) = (-) -- operator definition
(<*>) = (/)
answer = 42
answer <+> 12 -- prints 30
answer <*> 7 -- prints 6.0
关于c++ - 如何制作古怪的数学计算器? (最好是在 C++ 中,但其他的也可以。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100310/