gpt4 book ai didi

c++ - 使用存储在可变数据结构中的字段作为方法参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:47 26 4
gpt4 key购买 nike

我有一个可变数据结构,每个“层”包含一个字段。

如何使用存储在结构中的所有字段作为函数或构造函数的参数?

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

关于c++ - 使用存储在可变数据结构中的字段作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53302451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com