Re[3]: template для указателей
От: Piko  
Дата: 20.07.12 19:24
Оценка: 1 (1)
Здравствуйте, 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>ибо телепатия!

топикстартер написал:

Понимаю, что это можно сделать через специализацию

Re: template для указателей
От: breee breee  
Дата: 20.07.12 10:47
Оценка: +1
Здравствуйте, terent_y, Вы писали:

_>Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать?

_>Как за этим кроется причина и смысл?
_>Спасибо.

Не знаю какая кроется причина, но можно так:
#include <type_traits>

template<class T>
struct pointerVector
{
    static_assert(std::is_pointer<T>::value, "T should be a pointer.");
};
Re[2]: template для указателей
От: Caracrist https://1pwd.org/
Дата: 20.07.12 19:14
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Потомучто:

BFE>
BFE>template<class T> class pointerVector
BFE>{
BFE>//...
BFE>   std::vector<T*> m_ArrOfPtrs;
BFE>   std::vector<T>* m_ArrPtr;
BFE>};
BFE>

или так
template<class T> class pointerVector;
template<class T> class pointerVector<T*>
{
//...
   std::vector<T*> m_ArrOfPtrs;
   std::vector<T>* m_ArrPtr;
};

ибо телепатия!
~~~~~
~lol~~
~~~ Single Password Solution
template для указателей
От: terent_y  
Дата: 20.07.12 10:38
Оценка:
Подскажите пожалуйста почему нельзя сделать так:


template<class T*> class pointerVector
{
//...
};


Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать?
Как за этим кроется причина и смысл?
Спасибо.
c++ template pointer
Re: template для указателей
От: Vamp Россия  
Дата: 20.07.12 13:36
Оценка:
_>
_>template<class T*> class pointerVector
_>{
_>//...
_>};
_>


_>Выдает, что неправильный параметр шаблона. Понимаю, что это можно сделать через специализацию, но если просто нужен вектор только для указателей, почему так нельзя написать?

_>Как за этим кроется причина и смысл?

Потому, что параметр шаблона — это тип. А не указатель или ссылка на него.
Да здравствует мыло душистое и веревка пушистая.
Re: template для указателей
От: B0FEE664  
Дата: 20.07.12 14:30
Оценка:
Здравствуйте, terent_y, Вы писали:

_>Подскажите пожалуйста почему нельзя сделать так:


_>
_>template<class T*> class pointerVector
_>{
_>//...
_>};
_>


Потомучто:
template<class T> class pointerVector
{
//...
   std::vector<T*> m_ArrOfPtrs;
   std::vector<T>* m_ArrPtr;
};
И каждый день — без права на ошибку...
Re: template для указателей
От: Vain Россия google.ru
Дата: 20.07.12 14:39
Оценка:
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: template для указателей
От: rg45 СССР  
Дата: 21.07.12 09:49
Оценка:
Здравствуйте, 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>Понимаю, что это можно сделать через специализацию


А понимает ли топикстартер, что основновной шаблон можно только объявить, не определяя его? Подозреваю, что нет. Иначе этот вопрос вряд ли возник бы, проблема-то пустяковая.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.