创建"shortcuts"宏类定义

Creating "shortcuts" macro-like definitions

本文关键字:定义 shortcuts 创建      更新时间:2023-10-16

在我的代码中,我已经重写了大约一百万次static_cast<int *>,有没有办法重新定义一个关键字,以便每当我调用它时它都会做同样的事情?

cast会做与static_cast<int *>相同的事情

static_cast的好处

是C++程序员可以准确地识别它是什么,而无需去查找你的#define或其他语句。我强烈建议您继续使用static_cast

但是,我的假设是您的问题是所需的击键次数,因此最好的解决方案是使用支持宏的文本编辑器。这样,最终保存的代码确实使用标准的static_cast<T>(x)语法,但您可能只需要键入诸如 [sc]tab T tab xtab 之类的内容。

有关如何执行此操作的信息将在此类编辑器的文档中找到。我不是高度可定制的编辑器的忠实粉丝,所以细节超出了我的知识范围。

要求更简单的方法来做危险的事情......

是的,有很多方法可以完成您要求的事情,包括

  • C++模板,

  • 宏定义,

  • 编辑器快捷方式,

  • 自定义预处理,

  • 训练有素的猴子修复代码。

但你所做的只是让你的代码更不容易被摸索。

相反,试着弄清楚为什么你经常丢失类型信息,以至于你必须用手把它放回去,可以这么说。

一般的解决方案很简单,首先不要丢弃类型信息。

你的意思是这样?

#define SCAST(T,X) static_cast<T>(X); 

我应该警告你,一般来说,过度使用这样的定义会使你的代码晦涩难懂,更难理解。

更重要的是,您必须注意宏,因为它们可能会导致难以找到的错误,例如:

#define SQUARE(X) = X*X;

好吧,如果你用x++来称呼它,预处理器将进行字面替换,你最终会得到(x++)*(x++);这意味着它完全不会是你正在寻找的答案,并且让事情变得更糟,因为替换发生在幕后,你将很难找到原因。

建议您在可能的情况下查看模板函数或仅使用内联帮助程序函数,这是安全的,并且可以避免我指出的问题。