Итак, я сделал этот шаблон для определения встроенных функторов:
template <typename F, F* f>
struct AsFunctor
{
template <typename... Args>
std::invoke_result_t<F, Args...> operator()(Args&&... args) { return f(std::forward<Args>(args)...); }
};
, который можно использовать так:
std::unique_ptr<char, AsFunctor<void(char*), +[](char* c) {/*STUFF*/}>> p;
Прекрасно работает, за исключением того, что мне приходится без необходимости объявлять тип моей функции дважды. Есть ли способ, которым я могу заставить компилятор выводить это? Я пробовал decltype различными способами, такими как
#define AS_FUNCTOR(lambda) AsFunctor<decltype(+lambda), +lambda>
но это все ошибки компиляции, поскольку лямбды не могут отображаться в неоцененном контексте.