繁体   English   中英

通过带有类型通知的宏在C中重载运算符

[英]Overloaded operators in C via macros with type notification

C预处理程序不能用于重载运算符,因为它不知道表达式“ a + b”中a和b的类型,请参见此问题

但是,给它一个类型呢,像这样:

out = (a*b+b*n) x c : {a,b,c->vector3, n->float};

将其预处理为:

vector3 out = cross(add(dot(a,b), mult(b,n)),c);

这种解决方法在将代码库迁移到C ++或与C和C ++交互时很有用。 但是,:左边的表达式更易于阅读。

这样的解决方案可行吗?

使用C预处理程序是不可能的,我可以通过简单列出所有预处理程序指令来证明这一点。

  • #include (复制并粘贴文件内容)
  • #define (宏)
  • #if#else#elif#ifdef#ifndef (条件编译)
  • #line (更改__LINE____FILE__值)
  • #error (强制执行编译错误)
  • #pragma (与编译器相关的功能)
  • # (空指令,不执行任何操作)

您感兴趣的一种功能,宏,仅适用于标识符:

#define MAX(a,b) replacement
#define VALUE replacement

+*:{}不是标识符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM