Здравствуйте 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>
{
};