搜尋

首頁  >  問答  >  主體

c++模板 emplace为什么要设计成可变参数模板?

如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为什么要用可变参数模板?

阿神阿神2807 天前477

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:26:03

    沒記錯的話,emplace是直接在選定位置上使用參數構造物件。使用可變參數也是合情合理的呀,就像可變參數的new,智慧指標建構函數。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:03

    std::forward_list< std::pair > list;
    可以呼叫emplace_front(it, 1, 'x');

    std::forward_list list;
    可以呼叫emplace_front(it, 1);

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:26:03

    emplace是原地構造的,原地構造意味著API調用者不是把對象放進去,而是把構造對象參數放進去,當然就只能用可變參模板了.

    回覆
    0
  • 取消回覆