提问人:ca-hercor 提问时间:7/18/2023 更新时间:7/18/2023 访问量:29
模板化结构中的默认空构造函数
Default empty constructor in templated struct
问:
我正在阅读 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 下),那么,有人可以给我一个作者想要做什么的提示吗?我需要这个帮助。
谢谢。
答: 暂无答案
上一个:如何更改不可变对象的值
评论
add_one_f
add_one = {};
add_one = {/*your constructor parameter*/};
using F::F;