C++:将 Args && ... _args 传递给嵌套列表的正确方法?
C++: proper way to pass Args && ... _args to nested list?
假设我有一个包含列表的结构:
struct etc {
list<T> my_list;
}
现在,我想在 etc
级别包装列表的 'emplace' 方法以避免以下问题:
etc.my_list.emplace(_Args&&..._args) <-- bad
etc.emplace(_Args&&..._args) <--- good
但是,运行 遇到了一个问题:我无法弄清楚如何定义我的 emplace 方法,以便我能够将任意参数列表传递给 my_list.emplace_front(...)
:(伪-代码)
struct etc {
list<T> my_list;
void emplace(what do I do here?){
my_list.emplace_front(and how do I pass it here?);
}
}
它必须是一个接受类型参数包的模板。就像定义了std::list
的emplace成员一样
该参数包用于指定 emplace
接受一堆转发引用,然后将其馈送到 my_list.emplace
。
template<typename... Ts>
void emplace(Ts&&... ts){
my_list.emplace(std::forward<Ts>(ts)...);
}
这样就可以了。模板参数推导将推导出 Ts
,转发引用与 std::forward
结合使用时,将确保参数的值类别向前传递。
假设我有一个包含列表的结构:
struct etc {
list<T> my_list;
}
现在,我想在 etc
级别包装列表的 'emplace' 方法以避免以下问题:
etc.my_list.emplace(_Args&&..._args) <-- bad
etc.emplace(_Args&&..._args) <--- good
但是,运行 遇到了一个问题:我无法弄清楚如何定义我的 emplace 方法,以便我能够将任意参数列表传递给 my_list.emplace_front(...)
:(伪-代码)
struct etc {
list<T> my_list;
void emplace(what do I do here?){
my_list.emplace_front(and how do I pass it here?);
}
}
它必须是一个接受类型参数包的模板。就像定义了std::list
的emplace成员一样
该参数包用于指定 emplace
接受一堆转发引用,然后将其馈送到 my_list.emplace
。
template<typename... Ts>
void emplace(Ts&&... ts){
my_list.emplace(std::forward<Ts>(ts)...);
}
这样就可以了。模板参数推导将推导出 Ts
,转发引用与 std::forward
结合使用时,将确保参数的值类别向前传递。