是否可以在C++中获得类似于.NET的LINQ的功能?这需要语言扩展还是可以通过一些非常聪明的宏来完成?或者甚至可以通过像Qt的moc(元对象编译器)这样的工具来完成?是否存在用于C ++的现有LINQ实现,如果有,它们是什么?
使用这个 C++11 的 Linq 库,你可以使用类似 Linq 的语法进行列表推导:
std::vector<int> numbers = { 1, 2, 3, 4 };
auto r = LINQ(from(x, numbers) where(x > 2) select(x * x));
for (auto x : r) printf("%i\n", x);
from
、where
和select
子句,并使用Boost.Range适配器将其转换为等效的形式:auto r = numbers
| boost::adaptors::filtered([](int x) { return x > 2; })
| boost::adaptors::transformed([](int x) { return x * x; });
mybuilder.select("Trees").from("Sprites").where("Height > 4");
- wheaties
boost::lambda
、boost::parameters
、boost::phoenix
等库。所有这些库都试图模拟其他一些语言本地支持的功能。@GMan提到:"拥抱你的语言,不要试图将其变成其他语言。" - one-zero-zero-onefinally
是一个语义相关的例子。 RAII 很适合 C++ 语言的语义,finally
不适合。finally
很适合 C# 的语义,RAII 则不适合。这是一个不建议从其他语言借鉴或尝试模拟想法的例子。 - one-zero-zero-one