作为成员函数参数的元函数
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);
}
目前我的代码有这种形式:
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);
}