Примеры использования ключевых слов в C ++ 11 - PullRequest
0 голосов
/ 25 января 2019

Я знаю using в C ++ 11 ведет себя так же, как typedef. У меня есть этот код и я нашел разные варианты использования:

template<typename T, int a>
class Base
{
public:
     std::vector<T> noise_(a);
     using VectorType = std::vector<T>;
     virtual VectorType getVector() const
     {
        return noise_;
     }
protected:
     VectorType noise_;
};

template<typename T, int a> 
class Derived : public Base<T,a>
{
public:
    using Base<T,a>::noise_;
    using VectorType = typename Base<T,a>::VectorType; 
    using Base<T,a>::getVector;
};

Здесь using используется 3 различными способами. Какова цель следующей строки (noise_ является защищенным членом базового класса):

using Base<T,a>::noise_;

То же для:

using Base<T,a>::getVector;

1 Ответ

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

Проще говоря, когда базовый класс зависит от параметра шаблона, его область действия не проверяется для разрешения имен. Следовательно, вы не можете ссылаться на noise_ в Derived, используя только noise_. Вы должны либо написать this->noise_, либо ввести имя с using.

...