创建"shortcuts"宏类定义
Creating "shortcuts" macro-like definitions
在我的代码中,我已经重写了大约一百万次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++);
这意味着它完全不会是你正在寻找的答案,并且让事情变得更糟,因为替换发生在幕后,你将很难找到原因。
建议您在可能的情况下查看模板函数或仅使用内联帮助程序函数,这是安全的,并且可以避免我指出的问题。
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 创建"shortcuts"宏类定义