C++, член-тип шаблона

74
25 января 2022, 01:40

Рассмотрим следующий код:

template <typename T>
class Object
{
public:
    using p1 = unique_ptr<Object>;
    using p2 = unique_ptr<Object<T>>;
    // ...
};

Подскажите, пожалуйста, есть ли разница между p1 и p2?

Answer 1

Да никакого. Это просто разная запись одного и того же.

Можете убедиться:

void out()
{
    cout << typeid(p1).name() << endl;
    cout << typeid(p2).name() << endl;
}

дает один и тот же тип.

Ну, или используйте is_same.

Answer 2

Шаблон класса позволяет задать тип для объектов, используемых в классе, это не влияет на имя класса. Поэтому для шаблоннного класса:

template <class T>
class Object {
    T a;
public: 
    Object<T>(const T k) : a(k) {}
    Object(const T k) : a(k) {}
};

Имя Object и Object<T> идентичны в пределах этой же специализации, и тут присутствует двойное определение одного и того же конструктора

READ ALSO
Как выделить область изображения по цвету?

Как выделить область изображения по цвету?

В ходе работы встала задача выделить соседствующие пиксели по цвету, однако я никак не додумаюсь, как это сделатьЕсли как в одной строке вполне...

107
Upper_bound для pair

Upper_bound для pair

Язык: С++

115
Как вызвать название переменной в #define?

Как вызвать название переменной в #define?

Я хочу чтобы при вызове

172