Коллеги, подскажите, можно ли избавится от первого параметра шаблона?
#include <utility>
#include <stdio.h>
template <typename T, T> struct FunctionWrapper;
template < typename R, typename ...Args, R (*mf)(Args...)>
struct FunctionWrapper<R (*)(Args...), mf>
{
static R call( Args &&... args)
{
return mf(std::forward<Args>(args)...);
}
};
int ff() { return 1; }
int main () {
typedef int (*FunType)();
int x = FunctionWrapper< FunType, &ff >().call();
printf("run! %d", x);
return 0;
}
В идеале было бы добиться чего-то вроде
int ff() { return 1; }
int main () {
typedef int (*FunType)();
int x = FunctionWrapper< &ff >().call();
printf("run! %d", x);
return 0;
}
Хотелось бы в некоторых контейнерах задавать свои функции хэширования и сравнения не в конструкторе, а прямо в параметрах шаблона. Делать же отдельно функтор, который вызывает уже существующую функцию, в напряг.