Здравствуйте, terent_y, Вы писали:
_>Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать? _>Как за этим кроется причина и смысл? _>Спасибо.
Не знаю какая кроется причина, но можно так:
#include <type_traits>
template<class T>
struct pointerVector
{
static_assert(std::is_pointer<T>::value, "T should be a pointer.");
};
Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать?
Как за этим кроется причина и смысл?
Спасибо.
_>template<class T*> class pointerVector
_>{
_>//...
_>};
_>
_>Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать? _>Как за этим кроется причина и смысл?
Потому, что параметр шаблона — это тип. А не указатель или ссылка на него.
Здравствуйте, terent_y, Вы писали:
_>Подскажите пожалуйста почему нельзя сделать так: _>
_>template<class T*> class pointerVector
_>{
_>//...
_>};
_>
_>Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать? _>Как за этим кроется причина и смысл?
Причина простая, это — не C++. В С++ будет так:
template<декларация типов> class pointerVector<специализация типов>;
Соответственно в вашем случае будет так:
template<class T> class pointerVector; // объявление шаблонаtemplate<class T> class pointerVector<T*>; // объявление специализации шаблона
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Piko, Вы писали:
P>Здравствуйте, Caracrist, Вы писали:
C>>или так C>>
C>>template<class T> class pointerVector;
C>>template<class T> class pointerVector<T*>
C>>{
C>>//...
C>> std::vector<T*> m_ArrOfPtrs;
C>> std::vector<T>* m_ArrPtr;
C>>};
C>>
C>>ибо телепатия!
P>топикстартер написал:
P>
P>Понимаю, что это можно сделать через специализацию
А понимает ли топикстартер, что основновной шаблон можно только объявить, не определяя его? Подозреваю, что нет. Иначе этот вопрос вряд ли возник бы, проблема-то пустяковая.
--
Справедливость выше закона. А человечность выше справедливости.