![]() |
1
5
通过模板元编程和少量预处理,可以实现接近理想的语法:
实施:
笔记: 如果编译器对以下代码没有问题,MAKE\TUPLE宏应该是一个元函数:
|
![]() |
2
3
最终你所要求的不同于简单的说。。。
…变成。。。
…在这种情况下,doSomething被赋予了迭代和打印成员的能力,对吗? 您还可以编写一个简单的程序/脚本,读取类型和标识符列表并输出所需的C++代码。如果你有很多领域要处理,这可能是一个很好的方法。作为我脑海中最简单的一个轮廓,假设输入是这样的,换行符强制执行简单的类型与标识符划分(使您为数组等创建typedef):
……你可以生成一些C++代码ala…
如果您实际上不需要通过 ,如果每个字段都可以具有相同的类型(还不错-考虑boost::variant或~::any),或者如果可以确保每个字段都具有不同的类型(再次,这可以通过琐碎的包装器模板类来实现:我称之为“类型映射”(typemap)——在这里,您可以使用类型作为键,进入一个有效的类型不同值的关联容器,在编译时解析所有查找,并支持somefunc()实现所需的自动迭代。如果需要,可以将其与用于运行时类型命名的字符串相结合,但无法实现在编译时解析或验证的标识符字符串。
|
![]() |
3
2
不能使用模板指定名称,只能使用类型或某些类型的值。你也许可以用宏来做,但是在语言中尝试做太多的事情是一个陷阱,我已经掉进了太多次。。还有一条路可能对你有用: 代码生成
python是我在脚本中使用的,每个类的配置都是一些易于解析的东西,比如json,但这些都是次要的问题
|
![]() |
4
1
我发现这个问题没有具体说明,不清楚目的是什么。 我会考虑 the Boost library's serialization support . Boost parameters library 第二个更简单的用法是 my own options pack support
还有一个更基本的未增强宏集,它删除了增强依赖项,代价是必须指定每个生成类中的成员数。
阿尔夫 |
![]() |
5
1
我记得Andrei Alexandrescu在他的书《现代C++》中描述了类似的东西。我这里没有副本,所以我不知道它到底是什么,在哪里。
|
![]() |
6
0
模板不能指定变量名。如果您在编译时决定类中包含什么,您应该能够直接在源代码中指定它。
|
![]() |
7
0
您可以执行类似的操作,但它们不会有不同的名称:
这忽略了边界检查,但那是另一回事。 |
![]() |
9
0
这允许任意数量的数据元素(但在编译时是固定的),并允许对每个索引进行类型安全访问。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |