Я пытаюсь изучить boost :: phoenix и пытаюсь использовать его в std :: transform, как показано ниже.boost :: сообщение об ошибке phoenix при использовании в качестве функтора
class myClass
{
int i;
public:
getNumber();
setNumber(int j);
};
int main()
{
std::vector<myClass*> vect
std::vector<int> numVect
numVect.resize(vect.size());
using boost::phoenix::arg_names::arg1;
std::transform (vect.begin(), vect.end(), numVect.begin(), arg1->getNumber());
}
Но, я получаю сообщение об ошибке error: base operand of '->' has non-pointer type 'const boost::phoenix::actor<boost::phoenix::argument<0> >'
Я не совсем уверен, что это значит. Любая помощь будет большой. Благодаря
Я предлагаю вам отказаться. Не принимайте это неправильно - я просто думаю, что Phoenix слишком сложна для использования на самом деле, и вы нашли отличный пример того, почему большинство пользователей C++ никогда не смогут помочь вам исправить это, как изменить его позже. Просто используйте обычный цикл или что-то в этом роде. –
Я ценю ваше мнение. Но, я думаю, я просто нашел правильный способ сделать это std :: transform (vect.begin(), vect.end(), std :: back_insterter (numVect), (arg1 -> * & getNumber)()); – polapts
Отлично. Теперь забудьте, что вы когда-либо знали об этом, и будущие сопровождающие вашего кода будут вам больше нравиться. :) В любом случае, не стесняйтесь публиковать свой собственный ответ, если вы получаете полностью работоспособную версию, закодированную с использованием тех же имен, что и в вашем вопросе. –