Специализированный базовый класс с параметром шаблона шаблона - PullRequest
0 голосов
/ 17 мая 2018

Я ударился головой о следующий код:

template<class... Ts> struct typelist{};

template<class S> struct Fun;

template<template<class...> class S, class... Ts>
struct Fun<S<Ts...>> {
    std::tuple<Ts...> _fun;
};

template<class S, class P> struct Gun;

template<template<class...> class S, class... Ts, class P>
struct Gun<S<Ts...>, P>: Fun<S<Ts...>>{
    auto hun(){
        std::cout << std::get<0>(_fun); // error: use of undeclared identifier '_fun'
    }
};

auto main(int /*argc*/, char* /*argv*/[])-> int {
    auto gun = Gun<typelist<int>, float>{};
    gun.hun();
    return 0;
}

Я не понимаю, что здесь происходит и почему я получаю эту ошибку.Там должно быть что-то очевидное, я не вижу ...

1 Ответ

0 голосов
/ 17 мая 2018

Обратите внимание, что базовый класс зависит от параметров шаблона, а _fun - это независимое имя, которое не будет найдено в зависимых базовых классах.

Вы можете сделать имя _funв зависимости от этого он будет проверен во время создания экземпляра;в то время точная базовая специализация известна.

например

std::cout << std::get<0>(this->_fun);
//                       ~~~~~~
std::cout << std::get<0>(Fun<S<Ts...>>::_fun);
//                       ~~~~~~~~~~~~~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...