使用boost来创建一个总是抛出的lambda函数

时间:2010-08-25 09:22:54

标签: c++ boost lambda

是否可以使用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>

1 个答案:

答案 0 :(得分:4)

Boost.Lambda中有a throw_exception function

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