创建“快捷方式”宏观定义

时间:2012-09-20 03:26:52

标签: c++ macros c-preprocessor

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

例如

cast会与static_cast<int *>

做同样的事情

3 个答案:

答案 0 :(得分:1)

要求更轻松地做一些危险的事情...

是的,有很多方法可以实现您的要求,包括

  • C ++模板,

  • 宏定义,

  • 编辑器快捷方式,

  • 自定义预处理,

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

但是你所做的就是让你的代码更不容易理解。

相反,试着找出你经常如何丢失类型信息,这样你就必须手动把它放回去,可以这么说。

通常的解决方案是,首先丢弃类型信息。

答案 1 :(得分:1)

你的意思是这样吗?

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

我应该警告你,尽管过度使用这样的定义可能会使你的代码模糊不清,难以理解。

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

#define SQUARE(X) = X*X;

如果你用x++调用它,那么预处理器会进行字面替换,你最终会得到(x++)*(x++);,这意味着它完全不是你正在寻找的答案因为替换发生在幕后,你很难找到原因。

我建议您尽可能地查看模板函数或内联辅助函数,它是安全的,并且可以避免我指出的问题。

答案 2 :(得分:1)

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

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

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