Я читаю некоторый код на С ++, и приведенный ниже список кодов очень запутывает меня.
Я могу предположить, что он пытается определить специализированный шаблон, который пытается отследить типы входных аргументов.Но у меня возникло несколько вопросов:
первый шаблон выглядит как деривация и специализация шаблона, если он является производным, как структура может быть получена из себя?если это специализация шаблона, где определение шаблона?
template<typename F>
struct function_traits : public function_traits<decltype(&F::operator())>
{};
template<typename R, typename C, typename ... Args>
struct function_traits<R(C::*)(Args...) const> {
template<size_t i>
struct arg
{
using type = typename std::tuple_element<i, std::tuple<Args...>>::type;
};
};