- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在做 C/C++ 编程(主要是 C++),我发现自己需要分解实际上两倍相同的代码,除了每次出现的“左”都被“右”替换。代码完成后,我需要知道正在执行的是“左”还是“右”版本,仅此而已,两者都会返回一个我可以理解的数字(一旦与左或右信息结合) .
在此设置中,每次更改都需要进行两次,这很烦人。
所以我可以通过将左/右替换为“其他”来简单地分解并调用分解函数两次,每次都知道我是为“左”还是为“右”调用它。
现在当我们到达那部分代码时,已经有一百万个变量(游标、ID、正在填充的数组等)。因此,如果我想分解左/右代码,我需要函数有大量参数,这看起来很难看。
我也不想用仅在这种情况下使用的属性重载我的 C++ 类。
有什么建议可以在这里顺利分解吗?
int arrayRight[many], arrayLeft[many], cursor;
while(1)
{
rightThing = arrayRight[cursor];
// Process with RightThing assigned
// ...
// ...
// ...
leftThing = arrayLeft[cursor]
// Process with RightThing assigned
// ...
// ...
// ...
cursor++;
}
最佳答案
试试这个? (它只适用于 C++14,因为它使用自动 lambda)
auto func = [&](auto& theThing){
// blah, blah code
};
func(arrayRight[cursor]);
func(arrayLeft [cursor]);
[&]
这里的意思是将同一范围内的所有变量都导入到lambda函数中。
对于旧的 C++ 版本,我使用下面的代码作为一种丑陋的方式(在学校的 C99 项目中)。
int* pData[2] = {arrayRight, arrayLeft};
for (int i=0; i<2; i++)
{
int* theThing = pData[i];
// blah, blah
}
我的一些 friend 告诉我宏可以容纳 VA_ARGS,所以这是一个宏方法。它应该适用于 GCC。但是对于 MSVC 2003,它不起作用。 (__typeof
需要替换为boost::typeof
,旧版本MSVC不支持匿名结构体定义)
#define in(...) __VA_ARGS__
#define PP_ARG_N( \
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
_21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
_31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
_41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
_51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
_61, _62, _63, N, ...) N
#define PP_RSEQ_N() \
63, 62, 61, 60, \
59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
9, 8, 7, 6, 5, 4, 3, 2, 1, 0
#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__)
#define PP_NARG(...) PP_NARG_(__VA_ARGS__, PP_RSEQ_N())
#define withInternal(dataType, desiredType, x, dataCnt, data...) for(struct {size_t __i; dataType __t[dataCnt];} __s = {0, data}; x = __s.__t[__s.__i], __s.__i < dataCnt; __s.__i++)
#define with(x, ...) withInternal(__typeof(__VA_ARGS__), __typeof(__VA_ARGS__), x, PP_NARG(__VA_ARGS__), __VA_ARGS__)
#define withConst(x, ...) withInternal(__typeof(__VA_ARGS__), __typeof((__VA_ARGS__) + 0), x, PP_NARG(__VA_ARGS__), __VA_ARGS__)
#define withType(tn, x, ...) withInternal(tn, tn, x, PP_NARG(__VA_ARGS__), __VA_ARGS__)
当你使用它时:
int main()
{
int x;
int s1=2, s2=3;
with(x, in(s1, s2))
cout<<x<<endl;
withConst(x, in(45, 55))
cout<<x<<endl;
withType(int, x, in(45, s1, 55, s2))
cout<<x<<endl;
return 0;
}
我相信它更清楚。
with
使用变量(基本上),因为当将常量传递给 with
时,gcc __typeof
会为 x 生成自动常量类型
无法分配。withConst
使用 x+0
技巧来删除 const 类型的变量,但 +
运算符并不适用于所有数据类型,因此它有局限性。withType
指定数据类型,适合混合情况。关于C++ : Factorize code without passing a million arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784640/
code
正常吗?
我刚刚开始使用 YARD 来记录我的 Rails 应用程序。我没有指定任何特定的标记处理程序,但我希望 `code` 会转换为 code,但这似乎没有发生。这是正常行为吗?我是否必须添加一些额外的选项
什么是Code-Server 首先程序员朋友们肯定都用过来自微软的VS Code 这款轻量而又高级的编辑器,拥有丰富的插件库,支持各种语言编译运行。而本文介绍的Code-Server就是coder 公
我是一名高中生,今年开始学习汇编。 我目前正在制作 Pacman 克隆作为我的最终项目。 我遇到的唯一问题是我的代码很大,*.exe 文件几乎有 64KB。 所以我的问题是,如果我转向模型介质,我需要
锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 挑战 按字符计数绘制 Code 39 条码的 ASCII 表示的最短代码。 维基百科关于代码 3
我正在开发 VS 代码的扩展(使用 javascript)。现在我需要安装 VS Code 的路径。 windows有一种方法: var child = require('child_process'
[Windows 10] 我在自定义目录中安装了“Microsoft VS Code(用户设置)”,每当我尝试更新它时,都会显示: 然后这个 Log Info Dec 23 11:42:40.673
我正在尝试更新我的 VS 代码,但收到一条错误消息:由于防病毒软件和/或进程失控,更新可能会失败。 附加了一个来 self 的用户的日志文件,但我不确定要检查什么。我对计算机和编程还是个新手。 最佳答
几天前我安装了 Kali Linux。我正在尝试使用 Code-OSS 而不是 VSCode,因为最新版本的 Kali 没有安装普通版本所需的库。 如果我尝试使用 code-oss . 或 code
我正在从 Atom 迁移到 VS Code,因为这似乎是当今所有酷 child 都在使用的东西。 在 atom 中,我能够如图所示突出显示当前行号(装订线中的蓝色突出显示)。 有没有办法在 VS Co
我试图找到一个明确的 G 代码语法规范,而不是单个 G 代码的含义,我无处不在的规范,我的意思是详细的语法规范,目的是编写解析器。 我编写解析器没有问题,我只是在寻找语法规范,例如。我知道您不必总是为
我想在 VS Code (Windows) 中使用 Fira Code,并且已经按照 instructions 中的说明配置了字体。 。不知何故,字体看起来很模糊。我该如何解决这个问题? "edito
这个问题已经有答案了: How can I navigate back to the last cursor position in Visual Studio Code? (16 个回答) 已关闭
如何选择当前单词,即插入符号所在的位置。 注意:我正在寻找 Visual Studio Code(VS Code)(文本编辑器)的快捷方式,而不是 Visual Studio IDE。 最佳答案 在
我需要在 VS Code 中安装 flutter 但在安装扩展中,我有这个错误 Unable to install 'Dart-Code.flutter'; there is no available
memberData
有什么区别
{@code memberData} 和有什么区别?和 memberData在 JavaDoc 中 最佳答案 有两个主要区别: {@code ...}更简洁:更易于阅读(和输入)。 {@code ..
我有这样一个字符串: Here is my code sample, its not too great: [CODE] [/CODE] I hope you enjoy. 现在我想用 highli
在 VS Code 中,我有一个少于 50 个文件的 Vue 项目,但是在运行开发服务器时 VS Code 抛出 Error: ENOSPC: System limit for number of f
Source Code Pro 如何在 VSC 中使用 ExtraLight ~? 似乎以下不起作用...... 我确定我有字体。 Source Code Pro ExtraLight 最佳答案 编辑
我对 Visual Studio Code 很陌生。我正在尝试调试一个已经存在的应用程序,我已经通过 Git 克隆了它。我的文件都没有被修改。我已经下载了微软扩展“C# for Visual Stud
Visual Code VS Visual Studio Code Insider 我还是不明白这两者有什么区别,难道其中一个是新功能的试用版吗? 最佳答案 Visual Studio Code In
我是一名优秀的程序员,十分优秀!