
Linca
@linca
在 C++ 中模拟一个管道运算符。
#include <iostream>
template <typename T> class Pipe {
private:
public:
T value;
Pipe(T value) : value(value) {}
template <typename F>
auto operator>>(this Pipe<T> &&self, F &&func)
-> Pipe<decltype(func(std::declval<T>()))> {
using ReturnType = decltype(func(std::declval<T>()));
return Pipe<ReturnType>(func(std::move(self.value)));
}
template <typename F>
auto to(this Pipe<T> &&self, F &&func)
-> Pipe<decltype(func(std::declval<T>()))> {
using ReturnType = decltype(func(std::declval<T>()));
return Pipe<ReturnType>(func(std::move(self.value)));
}
};
int main() {
auto result = Pipe<int>(5) >> ([](int &&x) { return x * 2; }) >>
([](auto &&x) { return x + 1; });
std::cout << result.value; // Should return 11
return 0;
}