У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.
Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ?
Как получить имя класса а не имя указатели не класс?
Здравствуйте, Аноним, Вы писали:
А>Есть шаблон
А>У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.
А>Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ? А>Как получить имя класса а не имя указатели не класс?
Сделать частичную специализацию своего шаблона на случай, если передан указатель
template <typename T> MyTemplate<T*>
{
... здесь Т — это тип получаемый разыменованием типа шаблонного параметра
}
Либо сделать вспомогательный гласс, который "убирает звёздочки", т.е. по указательным типам получал обычные.
Типа сделать шаблон remove_pointer, у которого remove_pointer<std::string*>::type давало бы std::string.
Здравствуйте, 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;
};
Здравствуйте, Аноним, Вы писали:
А>Есть шаблон
А>У него есть параметр, некий класс. Иногда в параметрах указывают указатель на некий класс, это по сути тоже класс.
А>Мне надо получить доступ к статическому члену того класса который передали, узнать даже в том случае если передан указатель. Как ? А>Как получить имя класса а не имя указатели не класс?
wander:
PD>>Либо сделать вспомогательный гласс, который "убирает звёздочки", т.е. по указательным типам получал обычные. PD>>Типа сделать шаблон remove_pointer, у которого remove_pointer<std::string*>::type давало бы std::string.
W>
Здравствуйте, Masterkent, Вы писали:
M>Это плохой remove_pointer, т.к. не учитывает возможную cv-квалифицированность типа. Например, для int * const результатом будет int * const, а не int.
Хороший известно где. А это просто демонстрация.