Re: boost::phoenix как правильно разрешить неоднозначность
От: Alexey F  
Дата: 09.08.11 16:19
Оценка: 1 (1)
Здравствуйте, nen777w, Вы писали:

N>
[...]
N>        //error C2914: 'boost::phoenix::operator ->*' : cannot deduce template argument as function argument is ambiguous
N>        //error C2568: '->*' : unable to resolve function overload
N>    std::for_each( v.begin(), v.end(), lambda[ (_1->*&S::foo)() ] );
N>}
N>


Как обычно в случае перегруженных ф-ций:
std::for_each( v.begin(), v.end(), lambda[ (_1->* static_cast<int ( S::* )()>( &S::foo ) )() ] );

boost::phoenix как правильно разрешить неоднозначность
От: nen777w  
Дата: 09.08.11 15:57
Оценка:
Например:

struct S
{
    int foo() { return 0; }
    int foo( int ) { return 1; }
};

typedef std::vector<S> v_S;

void test()
{
    using boost::phoenix::placeholders::_1;
    using boost::phoenix::lambda;

    v_S v;

        //error C2914: 'boost::phoenix::operator ->*' : cannot deduce template argument as function argument is ambiguous
        //error C2568: '->*' : unable to resolve function overload
    std::for_each( v.begin(), v.end(), lambda[ (_1->*&S::foo)() ] );
}


Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.