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

发布于 2024-09-15 18:10:51 字数 624 浏览 6 评论 0原文

是否可以使用 boost 创建一个总是抛出异常的内联 lambda?

(这个问题来自 “使用 boost 创建一个始终返回 true 的 lambda 函数”)。

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

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,它返回没有默认构造函数的类型。)

Is it possible to create an inline lambda using boost which always throws an exception?

(this question follows on from "Using boost to create a lambda function which always returns true").

Suppose I have a function which takes some form of predicate:

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

If I want to call it with a predicate that always throws an exception, define a helper function:

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

But is there anyway to call this function (possibly using boost::lambda) without having to define a separate function?

(Note 1: I can't use C++0x.)

(Note 2: I've simplified this example. My actual "predicate" function doesn't return a bool, it returns a type which doesn't have a default-ctor.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单身狗的梦 2024-09-22 18:10:51

一个throw_exception< Boost.Lambda 中的 /code> 函数

例如

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

There is a throw_exception function in 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文