На самом деле вас не волнует ни один из этих базовых типов (по крайней мере, в коде, представленном здесь).Так что просто не используйте его.Все, что вас волнует, это то, что все эти вещи являются указателями на функции:
typename <typename... F>
static std::vector<VoidFunc> registerFunctions(F*... funcs)
{
static_assert((std::is_function_v<F> && ...));
return { reinterpret_cast<VoidFunc>(funcs)... };
}
Если вам нужно нужны подписи для чего-то еще, вы можете просто передать каждый элемент funcs
вдругой шаблон функции и просто переведите туда собственно сигнатуру.
Обратите внимание, что typename
там не нужен, а constexpr
в C ++ 17 делает это неправильно (так как вы не можете в C ++ 17 иметь constexpr
std::vector
).