模板化结构中的默认空构造函数

Default empty constructor in templated struct

提问人:ca-hercor 提问时间:7/18/2023 更新时间:7/18/2023 访问量:29

问:

我正在阅读 Paul Fultz 关于可管道函数的博客文章,其中有他定义的pipe_closure

1 template<class F>
2 struct pipe_closure : F
3 {
4     template<class... Xs>
5     pipe_closure(Xs&&... xs) : F(std::forward<Xs>(xs)...)
6     { }
7 };

我知道完美转发问题,它是如何通过之后(模板化表达式)类型推理来解决的。std::forward

我没有抓住的是第 5 行实际上打算作为一个整体做什么。我目前对这个代码块的理解是,我们正在继承一个模板化类型,该类型将来将被视为一个函子(通过继承一个对象覆盖),但为什么要使用一个本身是空的结构的成员初始值设定项。()

例如,我们可以从中继承的结构(在同一帖子中使用)

1 struct add_one_f
2 {
3     template<class T>
4     auto operator()(T x) const
5     {
6        return x + 1;
7     }
8 };
9 const pipe_closure<add_one_f> add_one = {};

如果我们删除第一个块的第 5 行,代码就会编译并成功运行(在 Fedora linux 的 gcc-12 下),那么,有人可以给我一个作者想要做什么的提示吗?我需要这个帮助。

谢谢。

C++ 模板 闭包

评论

0赞 Jarod42 7/19/2023
尝试添加一个非空构造函数,然后更改为 。add_one_fadd_one = {};add_one = {/*your constructor parameter*/};
0赞 ca-hercor 7/19/2023
我的意思是这是真的,这将不可避免地失败,但我正在寻找这种特定情况下的理由(这似乎只是为了扩展代码)。
1赞 Jarod42 7/19/2023
继承构造函数可能会更好 顺便说一句 () 演示using F::F;
0赞 ca-hercor 7/19/2023
为什么这会是更好的选择?
0赞 StoryTeller - Unslander Monica 7/19/2023
函子不一定是无状态的。

答: 暂无答案