请看下面的代码:
如果我调用
编译器给出的错误是无法推断模板参数。请问您能否提供建议,如何重新编写function1和/或function2(也许,通过使用类从根本上进行重写)以使其可行?
*添加*
我正在尝试做一些简单的东西,比如在Boost.LambdaLib中使用lambda表达式(也许我走错了路)。
我做了这个:
但是我希望它不需要像LambdaLib那样需要模板参数。
请看下面的代码:
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) ) {}
如果我调用
function3(function2<char>());
可以这样做。但是如果我调用
function3(function2());
编译器给出的错误是无法推断模板参数。请问您能否提供建议,如何重新编写function1和/或function2(也许,通过使用类从根本上进行重写)以使其可行?
*添加*
我正在尝试做一些简单的东西,比如在Boost.LambdaLib中使用lambda表达式(也许我走错了路)。
sort(some_vector.begin(), some_vector.end(), _1 < _2)
我做了这个:
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) {}
template <typename T>
bool (*operator<(const my_comparing& another) const)(const T&, const T&) {
if (this->value == 1 && another.value == 2) {
return my_func_greater<T>;
} else {
return my_func_greater<T>;
}
}
};
const my_comparing& m_1 = my_comparing(1);
const my_comparing& m_2 = my_comparing(2);
它能够正常工作:
sort(a, a + 5, m_1.operator< <int>(m_2));
但是我希望它不需要像LambdaLib那样需要模板参数。
function3(function2<char>());
有什么问题? - Ferdinand BeyerT
类型的变量,并返回一个bool
类型的值。如果你不能立即解析它,我认为这表明你确实是一位优秀的 C++ 程序员(我不得不回到 C 语言时代深处才能理解它)。 - bitmaskdecltype
)来澄清声明。 - jalf