gpt4 book ai didi

c++ - 自定义 C++ 预处理器/Typeful 宏

转载 作者:行者123 更新时间:2023-11-30 04:40:18 25 4
gpt4 key购买 nike

看到了 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);
}

最终,我希望能够使用最少量的样板代码对 inst 进行任意排序。我能看到的最简单的方法是使用 STL 的排序:

sort(vec.begin(),vec.end());

但这需要我编写一个可以比较“struct s”的方法。我宁愿做的是:

sort(vec,a ASC,b DESC);

这显然不是有效的 C++。

实现梦想的最佳方式是什么?如果我有某种类型化的宏,它会向我揭示 vector 元素的类型,那么编写 C 预处理器宏来创建进行排序所需的函数将是微不足道的。

备选方案似乎是编写我自己的预处理器。这很好用,直到我不得不再次推断出“vec”的类型。有没有简单的方法可以做到这一点?

上下文:更少的代码 = 更少的错误、编程竞赛。

最佳答案

对于以上,你可以使用Boost.Lambda内联编写比较函数,就像 Python lambda 一样:

using namespace boost::lambda;

std::sort(vec.begin(), vec.end(), (_1 ->* &s::a) < (_2 ->* &s::a));

这当然假设您按 a 排序。

如果您要查找的表达式要复杂得多,您最好编写一个单独的函数;即使在像 Python 和 Ruby 这样原生支持闭包的语言中,复杂的闭包也变得非常不可读。

警告上面的代码未经测试。

希望这对您有所帮助!

关于c++ - 自定义 C++ 预处理器/Typeful 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com