Последняя строка ниже не будет компилировать в Visual Studio 2005:Lambda Функция Замены в Visual Studio 2005 - Библиотека Boost,
std::deque<int> q;
boost::condition_variable cond;
boost::mutex mu;
boost::unique_lock<boost::mutex> locker(mu);
cond.wait(locker, [](){ return !q.empty();}); // Unlock mu and wait to be notified
Я думаю, что это лямбда-выражение, и я подозреваю, что Visual Studio 2005 компилятор не поддержка синтаксиса ... C++ 11? В любом случае, я могу исправить это, кроме изменения моего компилятора?
Вот класс декларации от повышения:
class condition_variable:
private detail::basic_condition_variable
{
public:
BOOST_THREAD_NO_COPYABLE(condition_variable)
condition_variable()
{}
using detail::basic_condition_variable::notify_one;
using detail::basic_condition_variable::notify_all;
void wait(unique_lock<mutex>& m)
{
do_wait(m,detail::timeout::sentinel());
}
template<typename predicate_type>
void wait(unique_lock<mutex>& m,predicate_type pred)
{
while(!pred()) wait(m);
}
...
Compiler Output:
error C2059: syntax error : '['
error C2143: syntax error : missing ')' before '{'
error C2143: syntax error : missing ';' before '{'
Boost имеет лямбды с Boost.Lambda и Boost.Phoenix. – chris
@chris: Но разве компилятор не должен поддерживать синтаксис? Если нет, то какие заголовки Boost следует включить для компиляции вышеуказанного кода? –
Нет, это не так. Это его красота. Boost делает некоторые довольно удивительные вещи только с C++ 03. Во всяком случае, идите посмотреть документацию (и учебник). Это включает заголовки. – chris