c++模板 emplace为什么要设计成可变参数模板?
阿神
阿神 2017-04-17 13:24:03
0
3
475

如forward_list中,

template< class... Args >
void emplace_front( Args&&... args );

如果这样设计,就意味着相应的辅助函数也要设计成可变参数模板,在VS中,它的确也是把相关的函数也设计成可变参数的,如:

template<class... _Valty>
        iterator emplace_after(const_iterator _Where, _Valty&&... _Val)
        {    // insert element at _Where
        _Insert_after(_Where, _STD forward<_Valty>(_Val)...);
        return (_Make_iter(++_Where));
        }

    template<class... _Valty>
        void _Insert_after(const_iterator _Where,
        _Valty&&... _Val)
        

但是在使用的时候,当时我的理解就是,使用

flist.emplace_front(it2, 22,33,44);

这样的方式。当然会报错,我就想问问,emplace为什么要用可变参数模板?

阿神
阿神

闭关修行中......

全員に返信(3)
Ty80

没记错的话,emplace是直接在选定位置上使用参数构造对象。使用可变参数也是合情合理的呀,就像可变参数的new,智能指针构造函数。

いいねを押す +0
洪涛

std::forward_list< std::pair<int, char> > list;
可以调用emplace_front(it, 1, 'x');

std::forward_list<int> list;
可以调用emplace_front(it, 1);

いいねを押す +0
迷茫

emplace是原地构造的,原地构造意味着API调用者不是把对象放进去,而是把构造对象参数放进去,当然就只能用可变参模板了.

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート