gpt4 book ai didi

c++ - 使用/不使用预处理器在 C++ 中创建新的运算符

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:24 24 4
gpt4 key购买 nike

我正在尝试用一些有用的东西来度过我的空闲时间。我正在编写一些基于线性代数的代码,定义 Rn vector 、矩阵和操作。

当我编写用于计算两个 R3 vector 之间的叉积的代码时,我面临着创建一个名为 x 的新运算符的可能性,然后我可以使用 u x v u.vectorial(v); 的。

我告诉你这些是因为我读了一些东西,发现使用预处理器我可以做我想做的事情。那么,有什么办法可以做到这一点吗?

最佳答案

这不会有好结果。 C++ 本身不支持创建新运算符,只为现有运算符提供自定义的每种类型的行为。并且预处理器不按类型执行任何操作,也不支持中缀表示法。

我肯定不会尝试使用单字母运算符,因为它们会在您的程序中被替换任何地方

要让像u cross v这样的东西工作,你可以

#define cross * cross_product_helper() *

然后使用表达式树中的一些技术——operator*(vec, cross_product_helper) 返回一个包含 vector 并知道它想要进行叉积的辅助类型,第二次使用 * 实际上做乘法。

另一方面,将代码写成这样会不会很糟糕:

u *cross* v

cross 是预定义的、范围适当的 cross_product_helper 类型的变量? (当然,您可以使用独特的类型定义类似的 dotelement 来制作 u *cross* v, u *dot * vu *element* v(和 u/element/v)都可以工作并返回不同的类型。

请注意,我选择了 operator* 作为 *cross* 的基础,而不是 +cross+^ cross^,因为它具有与产品相关的优先级和其他语法属性。

关于c++ - 使用/不使用预处理器在 C++ 中创建新的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22870004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com