Я пытаюсь использовать boost::phoenix
для эмуляции ямбда-выражений C++ для более старого компилятора, которому не хватает поддержки C++ 11, и я не могу вызвать простую функцию изнутри лямбда-выражение.Вызов функции изнутри boost :: phoenix :: lambda
C++ 11 Версия:
[](unsigned a) { foo(a); }(12678u); // calls foo(12678u)
My Phoenix Lambda код выглядит следующим образом:
#include <cstdint>
#include <iostream>
#include <boost/phoenix.hpp>
namespace ph = boost::phoenix;
using ph::local_names::_a;
using ph::placeholders::arg1;
void foo(uint32_t val)
{
std::cout << "\t" << __func__ << "(" << val << ") called...\n";
}
int main()
{
auto myLambda = ph::lambda(_a = arg1)
[
foo(_a)
//std::cout << ph::val("Called with: ") << _a << ph::val("\n")
](567u);
myLambda();
return 0;
}
Это производит следующее сообщение об ошибке компилятора:
lambda-ex.cpp: In function ‘int main()’:
lambda-ex.cpp:18:19: error: cannot convert ‘const _a_type {aka const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::phoenix::detail::local<boost::phoenix::local_names::_a_key> >, 0l> >}’ to ‘uint32_t {aka unsigned int}’ for argument ‘1’ to ‘void foo(uint32_t)’ lambda-ex.cpp:20:15: error: unable to deduce ‘auto’ from ‘<expression error>’
Как я вызывать функцию из выражения лямбда Phoenix?
Я надеюсь, чтобы иметь возможность использовать phoneix::lambdas
таким же образом, что я использовал C++ 11 лямбды в прошлом, например:
auto lambda1 = [&](uint32_t arg)
{
func1("Some Stuff", arg);
func2("Some More Stuff", aValueFromLocalScope, arg);
func3("Some Stuff", anotherValueFromLocalScope, arg);
};
someFuncImpl(aParam, lambda1);
Используйте [bind] (http://liveworkspace.org/code/aHc9d$10). – Mankarse
@Mankarse Это простой пример - я не хочу просто заменять лямбда 'boost :: phoenix :: bind (& foo, arg1)' - Я пытаюсь использовать 'phoneix :: lambda' для эмуляции C++ 11 lambdas , – mark
Кажется, что мое предложение было плохо продумано. [здесь] (http://liveworkspace.org/code/aHc9d$14) - это обновленная версия, которая вводит локальную переменную и вызывает несколько функций. – Mankarse