gpt4 book ai didi

c++ - 这是以前做过的吗? (用于链式操作的 Monad View 包装 C++ 集合/类型)

转载 作者:可可西里 更新时间:2023-11-01 18:38:28 25 4
gpt4 key购买 nike

那天晚上我在家里写一些 scala 来找乐子,我想,“如果我们在 C++ 中有这种 API 不是很酷吗?-这可能吗?”。我开始搜索 C++、monad 和 STL 集合,但找不到任何似乎能真正提高我的工作效率的东西:/。

因此,我着手实现一些概念验证(效率极低,但至少它有效!:)),用于通常在更专用的函数式语言中看到的内容。

auto m = monadic(std::vector<int>{1,2,3});
auto mMapped = m.map([](int x) {return x*x; });

Monadic<std::vector<int>> mFiltered = m.filter([](int x) {return x > 1; });

std::vector<std::string> funList =
monadic(src)
.flatMap([](int x) { return std::vector<int>{1,2,3};} )
.filter([](int x) { return x > 1; })
.map([](int x) { return std::to_string(x).append("_string"); })
.col;

对于我的日常 C++ 代码(数据管理、线程和分布式执行变得如此容易),我真的很喜欢这样的库(但使用移动语义更完整和高效)。

问题: --> 你知道 C++11 或 C++14 的任何此类库吗? <--

上面的代码使用了一个非常快速组合在一起的 PoC 库,我把它放在这里 https://github.com/GiGurra/cpp_monad (用 gcc 4.9.2、VS2015 和某些版本的 clang 测试没问题,记不清了)。

“Monadic”类不包含任何特定的实现,它只是传递给给定集合类型可用的任何 map/filter/flatMap 免费函数,例如 map 操作非常简单地实现如下:

class Monadic {
public:
...
template <typename MapFcn>
auto map(MapFcn mapFcn) { return monadic(cpp_monad::map(col, mapFcn)); }
...
};

// Default naive implementation in unspecialized case
template <typename T_Coll, typename T_MapFcn>
auto map(const T_Coll& src, T_MapFcn fcn) {
std::vector<decltype(fcn(internal::_firstElem(src)))> out;
std::transform(std::begin(src), std::end(src), std::back_inserter(out), fcn);
return out;
};

这样您就可以替换包装器或实现,而无需使用特定 API 修改代码。

只是一个想法,也许已经有更好的东西了。

最佳答案

看看 Eric Niebler 的范围 proposal和 sample implementation对于为 future 的 C++ 标准提出的类似 API。

Chandler Carruth 的 C++Now 2014 talk on Range algorithms 是关于为 C++ 设计更具“功能性”风格的算法库的另一种尝试。

关于c++ - 这是以前做过的吗? (用于链式操作的 Monad View 包装 C++ 集合/类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284847/

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