Как использовать std :: map с boost :: phoenix?

Как я могу использовать std::map внутри лямбда-функции феникса?

#include <boost\phoenix.hpp>
#include <map>

int main() {
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
using namespace std;
map<int, int> m;
auto foo = at(m, 3);
foo();
}

Почему это не работает?
Я получаю следующую ошибку:

C2440   'return': cannot convert from 'int' to 'std::pair<const _Kty,_Ty> ' xxx c:\lib\boost\phoenix\stl\container\container.hpp    167

В настоящее время я пользуюсь Visual Studio 2015 Community и использую библиотеку Boost 1.60.

2

Решение

На основе вопрос указал jv_:

Вместо того, чтобы использовать at функция, использование operator[],

#include <boost/phoenix.hpp>
#include <map>

int main() {
std::map<int, int> m;
m[3] = 33;
auto foo = boost::phoenix::ref(m)[3];
std::cout << foo() << "\n";
}

Похоже, что реализация феникса at ленивая функция использует value_type [1] [2] определить тип результата, который является std::pair<const int,int> в этом случае. тем не мение std::map<int,int>::at просто возвращает reference или же const_reference,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]