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);
}
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
Две ошибки. Функция недоступна, кроме того, имеет не тот тип.
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);
}
[skipped]
Спасибо большое. Ты мне действительно сильно помог(я наконец-то лучше понял). Еще раз спасибо