template deduction
От: Аноним  
Дата: 05.02.04 12:51
Оценка:
Hi!

Если я вызываю transform_equal(v1, v2), то
error C2783: 'void transform_equal (_Container,_Container,_Fn2)' : could not deduce template argument for '_Fn2'

Как красиво побороть?


compiler: MS7.1

template < class reference >
reference emptyFunc( reference r1, reference r2)
{
return r1;
}

template < class _Container, class _Fn2>
void transform_equal(_Container _InputCont, _Container _OutputCont, _Fn2 _Func = emptyFunc<_Container::reference> )
{
....
}
Re: template deduction
От: Lorenzo_LAMAS  
Дата: 05.02.04 12:59
Оценка:
template < class reference >
reference emptyFunc( reference r1, reference r2)
{
return r1;
}

template < class _Container> 
void transform_equal(_Container _InputCont, 
                     _Container _OutputCont, 
   typename _Container::reference (*Fn)(typename _Container::reference, typename _Container::reference)
= emptyFunc<_Container::reference>)
{
}

#include <vector>

void g()
{
   std::vector<int>v1, v2;
   transform_equal(v1, v2);
}
Of course, the code must be complete enough to compile and link.
Re[2]: template deduction
От: Аноним  
Дата: 05.02.04 13:58
Оценка:
Thanx, it helped

But now got another prb:


template < class reference >
reference emptyFunc( reference r1, reference r2)
{
return r1;
}

template < class _Container> 
void transform_equal(_Container _InputCont, 
                     _Container _OutputCont, 
   typename _Container::reference (*Fn)(typename _Container::reference, typename _Container::reference)
= emptyFunc<_Container::reference>)
{
}

#include <vector>

class CFoo
{
   static int SomeFunc(int i1, int i2);
};


void g()
{
   std::vector<int>v1, v2;
   transform_equal(v1, v2, CFoo::SomeFunc);
}


Compiler says:
error C2664: 'transfor_equal' : cannot convert parameter 3 from 'int (int,int)' to 'std::vector<_Ty>::reference (__cdecl *)(std::vector<_Ty>::reference,std::vector<_Ty>::reference)'
with
[
_Ty=int
]
None of the functions with this name in scope match the target type
Re[3]: template deduction
От: Lorenzo_LAMAS  
Дата: 05.02.04 14:08
Оценка:
Две ошибки. Функция недоступна, кроме того, имеет не тот тип.
template < class reference >
reference emptyFunc( reference r1, reference r2)
{
    return r1;
}

template < class _Container> 
void transform_equal(_Container _InputCont, 
                     _Container _OutputCont, 
   typename _Container::reference (*Fn)(typename _Container::reference, typename _Container::reference)
= emptyFunc<typename _Container::reference>)
{
}

#include <vector>

class CFoo
{public:
   static int & SomeFunc(int & i1, int & i2);
};


void g()
{
   std::vector<int>v1, v2;
   transform_equal(v1, v2, CFoo::SomeFunc);
}
Of course, the code must be complete enough to compile and link.
Re[4]: template deduction
От: Аноним  
Дата: 05.02.04 15:15
Оценка:
[skipped]

Спасибо большое. Ты мне действительно сильно помог(я наконец-то лучше понял). Еще раз спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.