что означает это определение шаблона в c ++? - PullRequest
0 голосов
/ 11 сентября 2018

Я читаю некоторый код на С ++, и приведенный ниже список кодов очень запутывает меня.
Я могу предположить, что он пытается определить специализированный шаблон, который пытается отследить типы входных аргументов.Но у меня возникло несколько вопросов:
первый шаблон выглядит как деривация и специализация шаблона, если он является производным, как структура может быть получена из себя?если это специализация шаблона, где определение шаблона?

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;
    };
};

1 Ответ

0 голосов
/ 11 сентября 2018

Первое объявление - это просто определение основного шаблона для struct function_traits. Обратите внимание, что нет проблем с конкретной специализацией шаблона, получаемой из другой специализации этого шаблона (при условии отсутствия циклов). Помните, что каждая специализация шаблона класса - это отдельный, не связанный тип.

Второе объявление просто вводит частичную специализацию для типов функций, экземпляры которых, вероятно, будут использоваться в качестве базового класса для первичного шаблона (поскольку первичный шаблон является производным от специализации, аргумент шаблона которой является типом функции-члена).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...