Как унаследовать шаблон и получить доступ к его параметрам в C ++ - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь наследовать шаблон в C ++. Этот шаблон использует пространство имен NSA, дочерний класс также имеет пространство имен NSB. Я хочу получить доступ к защищенным переменным шаблона внутри третьего класса. Но я не знаю как.

Это заголовки:

NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    }
}

NSB{
    class B{ #Don't know how to inherit template A
    ...
    }
}

Внутри cpp-файла класса C (все заголовочные файлы включены)

using namespace NSA;
NSB{
    unsigned int x = my_var #Get an error. Unidentified
    ...
} 

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Пропуск "C" mumbo jumbo, (который вы не объяснили четко)

Я считаю, что это то, что вы ищете:

namespace NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    };
}

namespace NSB{
    class B : public NSA::A<int> {
                        //  ^^^ some type or make class B as template 
    //...

    unsigned int x = my_var;
    };
}
0 голосов
/ 02 января 2019

Вы не можете получить из шаблона; вы можете получить только из класса. Таким образом, class B должно быть получено из экземпляра из A:

class B : public A<int> {
};

Если вы хотите, чтобы B был шаблоном, вы должны сказать так:

template <class Ty>
class B : public A<Ty> {
};

В любом случае доступ к членам базового класса немного сложнее, чем с обычным классом, поскольку шаблон может быть специализированным, а члены, объявленные в самом шаблоне, могут не существовать в конкретной специализации. Итак, вы должны сказать, что вы говорите о члене:

class B : public A<int> {
    unsigned f() { return A<int>::my_var; }
};

Вот еще один способ сказать то же самое:

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