作为成员函数参数的元函数

Metafunction as member function parameter

目前我的代码有这种形式:

template <typename T>
class A {
private:
  T data;
public:
  void apply_process(A<T> obj, std::function<T(A<T>&)> process) {
    data = process(obj);
  }
  // ... 
};

这适用于运行时 lambda;然而,虽然 obj 仅在运行时已知,但 process 将在编译时已知。我可以以某种方式重写它,以便 process 是一个作为编译时参数传递的元函数吗?最好使用 C++14 解决方案。

不清楚你想要什么,但是结合你抛出的关键字,我想你想要这个:

template <typename T>
class A {
private:
  T data;
public:
  template<class UnaryFunction>
  void apply_process(A<T> obj, UnaryFunction process) {
    data = process(obj);
  }
  // ... 
};

更迂腐一点使用完美转发(来自评论):

  void apply_process(A<T> obj, UnaryFunction&& process) {
    data = std::forward<UnaryFunction>(process)(obj);
  }