C ++ Перегрузка / Соответствие N вложенных шаблонов - PullRequest
0 голосов
/ 06 октября 2019

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

struct XAxis {};
struct YAxis {};

template<typename T>
class Deriv {
    public:
        double a;
        Deriv(double in_a) : a(in_a) {};
}

template<>
class Deriv<XAxis> {
    public:
        double a;
        Deriv(double in_a) : a(in_a) {};
        double x() {
            return a;
        }
}

template<>
class Deriv<YAxis> {
    public:
        double a;
        Deriv(double in_a) : a(in_a) {};
        double y() {
            return a;
        }
}

Затем работает следующее:

Deriv<XAxis> xvel{1.0};
std::cout << xvel.x() << std::endl;

Затем я хочу иметь возможность сделать следующее, но я не уверен, как это реализовать:

Deriv<Deriv<YAxis>> yacc{1.0};
std::cout << yacc.y() << std::endl;

Как мне это сделать?

1 Ответ

3 голосов
/ 06 октября 2019

Мне кажется, что частичная специализация должна делать то же, что и ваш упрощенный пример после

template<typename T>
class Deriv<Deriv<T>> : public Deriv<T> {
    public:
        Deriv(double in_a) : Deriv<T>(in_a) {};
};

Это должно обрабатывать произвольные вложенные Deriv специализации. Добавление вышеупомянутого достаточно для компиляции тестового примера, который, как я предполагал, является заявленной целью.

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