Как полчить тип параметр в темплейте
От: Аноним  
Дата: 27.07.11 09:57
Оценка:
Есть шаблон

У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.

Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ?
Как получить имя класса а не имя указатели не класс?
Re: Как полчить тип параметр в темплейте
От: PimpDaddy Россия  
Дата: 27.07.11 10:10
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Есть шаблон


А>У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.


А>Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ?

А>Как получить имя класса а не имя указатели не класс?

Сделать частичную специализацию своего шаблона на случай, если передан указатель

template <typename T> MyTemplate<T*>
{
... здесь Т — это тип получаемый разыменованием типа шаблонного параметра
}

Либо сделать вспомогательный гласс, который "убирает звёздочки", т.е. по указательным типам получал обычные.
Типа сделать шаблон remove_pointer, у которого remove_pointer<std::string*>::type давало бы std::string.
Re[2]: Как полчить тип параметр в темплейте
От: wander  
Дата: 27.07.11 10:32
Оценка:
Здравствуйте, PimpDaddy, Вы писали:

PD>Либо сделать вспомогательный гласс, который "убирает звёздочки", т.е. по указательным типам получал обычные.

PD>Типа сделать шаблон remove_pointer, у которого remove_pointer<std::string*>::type давало бы std::string.

template <typename T>
struct remove_pointer
{
    typedef T type;
};
template <typename T>
struct remove_pointer<T*>
{
    typedef T type;
};
Re: Как полчить тип параметр в темплейте
От: jazzer Россия Skype: enerjazzer
Дата: 27.07.11 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть шаблон


А>У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.


А>Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ?

А>Как получить имя класса а не имя указатели не класс?

Я мало что понял, но, возможно, тебе нужно вот это:
http://www.boost.org/libs/type_traits/doc/html/boost_typetraits/reference/remove_pointer.html

Оно же есть в новом стандарте, если твой компилятор его поддерживает (например, GCC4.3 и выше), подключай
#include <type_traits>
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Как полчить тип параметр в темплейте
От: Masterkent  
Дата: 28.07.11 11:05
Оценка:
wander:

PD>>Либо сделать вспомогательный гласс, который "убирает звёздочки", т.е. по указательным типам получал обычные.

PD>>Типа сделать шаблон remove_pointer, у которого remove_pointer<std::string*>::type давало бы std::string.

W>
W>template <typename T>
W>struct remove_pointer
W>{
W>    typedef T type;
W>};
W>template <typename T>
W>struct remove_pointer<T*>
W>{
W>    typedef T type;
W>};
W>

Это плохой remove_pointer, т.к. не учитывает возможную cv-квалифицированность типа. Например, для int * const результатом будет int * const, а не int.
Re[4]: Как полчить тип параметр в темплейте
От: wander  
Дата: 28.07.11 19:54
Оценка:
Здравствуйте, Masterkent, Вы писали:

M>Это плохой remove_pointer, т.к. не учитывает возможную cv-квалифицированность типа. Например, для int * const результатом будет int * const, а не int.

Хороший известно где. А это просто демонстрация.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.