Re[3]: О шаблонах и специализациях
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 27.06.02 14:42
Оценка:
Здравствуйте achp, Вы писали:

DG>>Ты напоролся сразу на две ошибке в компиляторе VC6.

DG>>1. VC6 не поддерживает тип void в полной мере
DG>>2. VC6 не поддерживает частичную специализацию шаблонов.

A>Спасибо на добром слове.


A>Так что же делать?


Пишется, что-то такое:


template< class Delegate, class Arg, class Result>
class _closure_base:
    public std::unary_function< Arg, Result >
{
private:
    Delegate& _d;
    Result (Delegate::*_f)(Arg);

public:
    explicit closure_t(Delegate& d, Result (Delegate::*f)(Arg)) :
        _d(d), _f(f)
    {}
};


template< class Delegate, class Arg, class Base>
class _closure_t:
  public Base
{
public:
   template<class Result>
   class TT
   {
    Result operator()(Arg x) const
    { 
        (_d.*_f)(x);
    }
   }
   template<>
   class TT<void>
   {
    void operator()(Arg x) const
    { 
       (_d.*_f)(x);
    }
   }
};

template< class Delegate, class Arg, class Result >
class closure_t : public _closure_t<Delegate, Arg, _closure_base<Deletegate, Arg, Result> >::TT<Result>
{
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.