是否可以使用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,它返回一个没有default-ctor的类型。) < / p>
答案 0 :(得分:4)
Boost.Lambda中有a throw_exception
function。
#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;
}