Re[3]: Шаблоны в C++
От: Glоbus Украина  
Дата: 24.11.04 15:54
Оценка: 1 (1) +1
Здравствуйте, AcidTheProgrammer, Вы писали:


ATP>Можно пример, желательно незамудренный, кода из которого можно увидеть что шаблон ведет себя не как простая подстановка?


Можно. Например классическая проверка является ли один класс наследником другого

template<class Der, class Base>
class IsDerived
{
private:
    typedef char _Yes_;
    typedef double _No_;
    static _Yes_ Test( Base* );
    static _No_ Test(...);
public:
    enum { Yes = sizeof(_Yes_) == sizeof( Test((Der*)0) ) , No = !Yes };
};


class CA
{
};

class CB : public CA 
{
};

class CC
{
};

 
int main()
{
  std::cout << IsDerived<CB,CA>::Yes << std::endl;
  std::cout << IsDerived<CC,CA>::Yes << std::endl;
}


Я думаю на макросах такое не прокатит — тут пользуется принцип SFINAE, чего в макросах например нету. Там препроцессор просто тупо забивает все переданными занчениями. В шаблонах ваще работает не препроцессор, а компилятор, который строит у себя специальные деревья разбора для шаблонов и инстанцирует только те части кода, которые используются. Ваще есть такая книженция Джосатиса/Ваневурда "Шаблоны С++", после прочтения которой ваще меняется взгляд на плюсы и программирование на них.
Удачи тебе, браток!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.