gpt4 book ai didi

c++ - 使用 boost 创建一个总是抛出的 lambda 函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:45 25 4
gpt4 key购买 nike

是否可以使用始终抛出异常的 boost 创建内联 lambda?

(这个问题来自 "Using boost to create a lambda function which always returns true")。

假设我有一个采用某种形式的谓词的函数:

void Foo( boost::function<bool(int,int,int)> predicate );

如果我想用一个总是抛出异常的谓词来调用它,定义一个辅助函数:

bool AlwaysThrow( int, int, int ) { throw std::exception(); }
...
Foo( boost::bind( AlwaysThrow ) );

但是有没有办法调用这个函数(可能使用 boost::lambda)而不必定义一个单独的函数?

(注意 1:我不能使用 C++0x。)

(注意 2:我简化了这个例子。我实际的“谓词”函数不返回 bool,它返回一个没有默认构造函数的类型。)

最佳答案

a throw_exception function在 Boost.Lambda 中。

For example :

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/exceptions.hpp>
#include <boost/function.hpp>

#include <exception>
#include <iostream>

struct Bar {
private:
Bar() {}
};

void Foo(boost::function<Bar(int,int,int)> predicate) {
std::cout << "should show" << std::endl;
predicate(1,2,3);
std::cout << "should not show" << std::endl;
}

int main () {
Foo( boost::lambda::ret<Bar>(boost::lambda::throw_exception( std::exception() ) ) );
return 0;
}

关于c++ - 使用 boost 创建一个总是抛出的 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3564415/

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