Я хочу передать функцию значение в качестве параметра шаблона функции. В настоящее время лучше всего мне удалось:
template< typename F, F f >
void pass()
{
...
}
... который используется:
pass< decltype(&func), &func >();
Мне бы очень хотелось:
pass< &func >();
Есть ли способ достичь этого без макросов? В принципе, одновременно передавать и тип, и значение? У компилятора, очевидно, есть вся необходимая информация для этого...
Решение должно работать с переменными параметрами и типами возврата. Значение функции используется во время компиляции, поэтому оно не может быть передано в качестве аргумента.
Решения на С++ 11 приветствуются.
Изменить: использовать случай - я генерирую привязки во время компиляции, где мне нужно создать функцию С++ для каждой переданной функции. Пример использования этого кода выглядит (упрощен) более или менее следующим образом:
template < typename F, F f >
int function_wrapper( lua_State* L )
{
return dispatcher<typename return_type<F>::type>::call( L, 1, f );
}
void register_native_function( lua_Function f, const char* name )
{
// binding call using pure C function f
}
template < typename F, F f >
void register_function( const char* name )
{
register_native_function( function_wrapper< F, f >, name );
}
Обратите внимание, что мне нужно создать оболочку функции времени компиляции, поэтому мне нужно значение функции pass во время компиляции. Имеются обязательные решения, которые позволяют привязывать во время выполнения, но они всегда требуют кода шаблона по сравнению с рукописными привязками. Я собираюсь выполнить ручную работу здесь.