1

...尽管库提供的constructor<>仿函数适配器定义了sig<>模板?

struct Porc
{
    Porc(int x) {}
};

boost::bind
(
    boost::lambda::constructor<Porc>(),
    _1
)(1);

错误:“struct boost::lambda::constructor”中没有名为“result_type”的类型</p>

我要做的是创建一个仿函数,它接受一个 int 并使用该 int 创建并返回一个 Porc 对象。注意:如果我明确指定函子的返回类型(即 Porc),如下所示,它可以工作:

boost::bind<Porc>
(
    boost::lambda::constructor<Porc>(),
    _1
)(1);

我对 lambda 表达式比较陌生,但我认为/希望我掌握了基础知识。它在文档中说通常,BLL 无法推断出任意函数对象的返回类型。但是,有两种方法可以为某个函数对象类赋予 BLL 这种能力。[...] result_type typedef 和 [...] sig 模板。由于constructor<>提供的是库,因此他们当然声明了一个sig<>模板。

4

0 回答 0