C++:将Args && ... _args传递给嵌套列表的正确方法?

don*_*lan 1 c++ variadic-templates perfect-forwarding

假设我有一个包含列表的结构:

struct etc {
    list<T> my_list;

}
Run Code Online (Sandbox Code Playgroud)

现在,我想在列表中包含列表的'emplace'方法etc以避免以下问题:

etc.my_list.emplace(_Args&&..._args) <-- bad

etc.emplace(_Args&&..._args) <--- good
Run Code Online (Sandbox Code Playgroud)

然而,碰到一个问题:我无法弄清楚如何定义我的emplace方法,以便我能够将args的任意列表传递给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?);
    }
} 
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

它必须是一个接受类型参数包的模板.就像std::list定居的成员一样.

该参数包用于指定emplace接受一堆转发引用,然后将其提供给my_list.emplace.

template<typename... Ts>
void emplace(Ts&&... ts){
    my_list.emplace(std::forward<Ts>(ts)...);
}
Run Code Online (Sandbox Code Playgroud)

这样就可以了.模板参数推导将推导出Ts,并且与转发引用一起使用时std::forward,将确保参数的值类别向前传递.