在 C/C++(可能是 C++11 之前的版本)中,是否可以这样做
A (*eval(A (*function)(B), B b))(){
// ... ??
}
即,一个函数
- 从 B 值返回 A 值的函数,
- 一个 B 值被馈送到该函数,
它返回 - 一个从 () 中返回 A 的函数 ...??
如果是,会是
- 高效的??
- 保证编译器生成在调用返回函数之前不执行的代码?
提前感谢和欢呼,尼克
2014-4-20 (1): 感谢您提及 'evtl.'(固定)std::bind。:-)
所以——要理解——(在没有 Boost 的 C/pre C++11 中)函数指针是例外的,因为在函数内部,只能声明它们,但无法生成或修改实例——如函数/方法定义是函数指针实例的唯一可能来源,它们可以显式地或通过函数/方法参数从那里移交?
只是问,因为我不清楚函数指针的可能内部表示......
2014-4-20(2):随着Danvil的贡献,是时候揭晓目的了,这里同模板:
template<typename T,typename A>
struct Evaluator {
T(*f)(A);
A a;
T operator()() const { return f(a); }
};
template<typename T,typename A>
Evaluator<T,A> eval(T(*f)(A), A a) {
Evaluator<T,A> w;
w.f= f; w.a= a;
return w;
}
这是可行的,而——正如一些人可能已经猜到的那样——从任意匹配的函数/参数集合中的整体,旨在作为零参数过程发送到类似于 try/catch 的单个函数/方法处理执行中。
由于不必为每个不同的参数计数使用几乎相同的代码,实际的想法是生成仍未执行的作业,作为所有情况下相同类型的零参数过程。
尽管如此,我还是没有找到如何在函数内部构造或修改函数指针的方法。以某种方式对 Evaluator 进行“类型转换”似乎不切实际,是吗?
再次,非常感谢,复活节快乐...... :-)