Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Препроцессор и шаблоны


Автор: chaos 9.12.2009, 21:45
Доброго времени суток.
Возник вопрос: можно ли получить имя конкретного типа
пример
Код

template <class T>
void print_concrete_type()
{
    std::cout << MACROS(T) << std::endl;
}

....
print_concrete_type<MyClass>();
print_concrete_type<HerClass>();
print_concrete_type<HisClass>();
print_concrete_type<TheirClass>();



что бы на выходе получилось
Код

MyClass
HerClass
HisClass
TheirClass

Автор: MTWizard 9.12.2009, 22:07
Препроцессор работает до компилятора, так что всё, что придёт в макрос - это именно T, а не конкретный тип

Автор: Abyx 9.12.2009, 22:16
1) можно использовать RTTI но конкретный формат вывода зависит от компилятора

2) надо где-то перечислить имена всех типов, чтобы сформировать список их строковых имен. затем привязать элементы списка типа к типам
в простейшем виде это

Код

template <class T>
void print_concrete_type();

#define MAKE_PRINT_FUNC(T) template<> void print_concrete_type<T>() {std::cout << #T "\n";}

#define MAKE_ALL(....) ....

MAKE_ALL
( MyClass
, HerClass
, HisClass
, TheirClass 
)

#undef MAKE_ALL
#undef MAKE_PRINT_FUNC


Добавлено через 5 минут и 24 секунды
или так
Код

// some_lib.h

template <class T> void print_concrete_type();
#define SOME_LIB_DECL_CLASS(T) \
   template<> void print_concrete_type<T>() {std::cout << #T "\n";} \
   class T \
   /*---*/


//user_file.h

SOME_LIB_DECL_CLASS(MyClass)
{
    ........
};

Автор: djamshud 9.12.2009, 22:25
По-нормальному имя типа не получить. Можно попробовать воспользоватся typeid.
http://msdn.microsoft.com/en-us/library/fyf39xec%28VS.80%29.aspx

Автор: chaos 10.12.2009, 08:14
Цитата(MTWizard @ 9.12.2009,  19:07)
Препроцессор работает до компилятора, так что всё, что придёт в макрос - это именно T, а не конкретный тип

тьфу блин. вчера видать переработал smile и сейчас только дошло что конструкции template обрабатывает не препроцессор.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)