c++ - 使用存储在可变数据结构中的字段作为方法参数
问题描述
我有一个可变数据结构,每个“层”都包含一个字段。
如何将存储在结构中的所有字段用作函数或构造函数的参数?
template <class... Ts> class Builder {};
template <class T, class... Ts>
class Builder<T, Ts...> : public Builder<Ts...> {
public:
Builder(T t, Ts... ts) : Builder<Ts...>(ts...), tail(t) {}
Result build() {
// want to use tail, Builder<Ts...>::tail, etc.
// as ctor or function arguments without multiple specializations
}
private:
const T tail;
};
一般来说,我希望能够做这样的事情:
Builder<int, string, int> b1{10, "aaa", 20};
Result r1 = b1.build(); // should invoke Result's constructor (int, string, int)
Builder<int> b2{10};
Result r2 = b2.build(); // should invoke Result's constructor (int)
解决方案
如果您不想使用元组作为成员来保存值,您可以这样做:
template <class... Ts> class Builder {
protected:
template<class...Us>
Result do_build(const Us&...us){
return Result(us...);
}
};
template <class T, class... Ts>
class Builder<T, Ts...> : public Builder<Ts...> {
public:
Builder(T t, Ts... ts) : Builder<Ts...>(ts...), tail(t) {}
Result build() {
return do_build();
}
protected:
template<class...Us>
Result do_build(const Us&...us){
return Builder<Ts...>::do_build(us...,tail);
}
private:
const T tail;
};
推荐阅读
- java - IntelliJ IDEA 中的调试超时
- php - 有什么更好的;mysql调度程序或php脚本和crontab?
- django - 'int' 对象没有属性 '_committed' Django
- joomla - Joomla 将内容插入产品详细信息
- java - java中调用构造函数时如何忽略null
- sql - 对 SQL 函数中的变量使用正则表达式
- r - 如何在 r 中的多个观察中总结特定事件(可能发生多次)之前的事件?
- oracle - SSIS ORA-12638 Visual Studio 2017
- c# - 正则表达式网站只有一个子文件夹,之后没有别的
- git - 是否可以放弃对不匹配模式的文件的未暂存的 Git 更改?