Linca

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;
}

Linca · Zero Calorie Drink Shop