Проблема порядка определения шаблона - PullRequest
0 голосов
/ 17 августа 2011

У меня есть простой миксин, который я смешиваю с другими моими шаблонными классами.

template<typename T> class mixin {
    static T* null() { return nullptr; }
    auto func() -> decltype(null()->func());
};
template<...> class A : public mixin<A<...>> {
    ....
};
template<...> class B : public mixin<A<...>> {
    ....
};
template<...> class C : public mixin<A<...>> {
    ....
};

Теперь у меня проблема.Одна из функций mixin будет возвращать тип, который должен быть выведен в зависимости от производного типа.Но когда я пытаюсь использовать дедукцию, чтобы найти этот тип, компилятор говорит мне, что я использую неопределенный тип.Если я перенесу определение mixin после классов, то не смогу наследовать его при смешивании. Как я могу изменить свои классы, чтобы разрешить вывод типов в этом случае?

1 Ответ

1 голос
/ 17 августа 2011

Я не верю, что есть какой-то способ заставить эту работу.У вас есть циклическая зависимость между типами каждого класса.A нужно определение mixin<A<...>>, а mixin<A<...>> - определение A.

На мой взгляд, лучше всего вручную указать тип в параметрах mixin.

Например:

template<typename ReturnType> class mixin
{
    auto func() -> ReturnType;
};

template<...> class A : public mixin<int>
{
    int func();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...