请考虑以下代码:
template<typename T>
bool function1(T some_var) { return true; }
template <typename T>
bool (*function2())(T) {
return function1<T>;
}
void function3( bool(*input_function)(char) ) {}
Run Code Online (Sandbox Code Playgroud)
如果我打电话
function3(function2<char>());
Run Code Online (Sandbox Code Playgroud)
没关系.但是,如果我打电话
function3(function2());
Run Code Online (Sandbox Code Playgroud)
编译器给出的错误是它无法推导出模板的参数.
请问,你可以建议(提出一个想法)如何重写function1和/或function2(可能,基本上是用类重写)来使它好吗?
*添加*
我正在尝试做一些简单的事情,比如Boost.LambdaLib中的lambda表达式(可能是,我的方法不对):
sort(some_vector.begin(), some_vector.end(), _1 < _2)
Run Code Online (Sandbox Code Playgroud)
我这样做了:
template<typename T>
bool my_func_greater (const T& a, const T& b) {
return a > b;
}
template<typename T>
bool my_func_lesser (const T& a, const T& b) {
return b > a;
}
class my_comparing {
public:
int value;
my_comparing(int value) : value(value) …Run Code Online (Sandbox Code Playgroud) 您能否以简单,优雅和智能的方式介绍如何在没有特殊库的情况下在C++ 03中实现基本的lambda表达式?他们应该可以做这样的事情:
for_each(some_vector.begin(), some_vector.end(), _first = -5)
sort(some_vector.begin(), some_vector.end(), _first > _last)
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow和互联网的其他地方看过很多主题,但不幸的是,我没有找到有用的东西.另一个想法是仔细研究Boost实现,但遗憾的是,我的水平现在还不太合适.
先感谢您!