gpt4 book ai didi

c++ - Visual Studio 2005 中的 Lambda 函数替代 -- Boost 库

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:28 25 4
gpt4 key购买 nike

下面的最后一行将不会在 Visual Studio 2005 中编译:

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

我认为这是一个 lambda 表达式,我怀疑 Visual Studio 2005 编译器不支持语法...C++11?除了更改编译器之外,还有什么方法可以解决这个问题吗?

这是来自 boost 的类声明:

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);
}

...

编译器输出:

error C2059: syntax error : '['
error C2143: syntax error : missing ')' before '{'
error C2143: syntax error : missing ';' before '{'

最佳答案

class UntilEmpty
{
public:
UntilEmpty(std::deque<int>& t) : q(t) {}

bool operator() () { return !q.empty(); }

private:
std::deque<int>& q;
};

然后简单地使用:

UntilEmpty until_empty(q);
cond.wait(locker, until_empty);

顺便说一下,UntilEmpty 通常被称为仿函数。

关于c++ - Visual Studio 2005 中的 Lambda 函数替代 -- Boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com