【发布时间】:2009-10-18 23:59:50
【问题描述】:
看到 Ruby 和 Python 中元编程的优势,但在实际工作中受限于 C++ 和 C 等低级语言,我正在考虑将两者结合起来的方式。一个例子是对任意结构/类的列表进行排序的简单问题。例如:
struct s{
int a;
int b;
};
vector<s> vec;
for(int x=0;x<10;x++){
s inst;
inst.a = x;
inst.b = x+10;
vec.push_back(inst);
}
最终,我希望能够使用最少的样板代码任意排序。我能看到的最简单的方法是使用 STL 的排序:
sort(vec.begin(),vec.end());
但这需要我编写一个可以比较“struct s”的方法。我宁愿做的是:
sort(vec,a ASC,b DESC);
这显然不是有效的 C++。
实现梦想的最佳方式是什么?如果我有某种类型的宏,它将向我揭示向量元素的类型,然后编写 C 预处理器宏来创建执行排序所需的函数将是微不足道的。
替代方法似乎是编写我自己的预处理器。这很好用,直到我不得不再次推断出“vec”的类型。有没有简单的方法可以做到这一点?
背景:更少的代码 = 更少的错误,编程竞赛。
【问题讨论】:
标签: c++ macros c-preprocessor metaprogramming type-inference