2010-05-12 81 views
68

我只是在寫一個通用對象工廠,並使用boost預處理器元庫來創建一個可變參數模板(使用2010,但不支持它們)。我的函數使用rval引用和std::forward來完成轉發,它讓我想到了......當C++ 0X出來並且我有一個標準的編譯器時,我會用真正的可變參數模板來做到這一點。儘管如此,我會在參數上調用std::forward嗎?如何在可變參數函數中的所有參數上調用std :: forward?

template <typename ...Params> 
void f(Params... params) // how do I say these are rvalue reference? 
{ 
    y(std::forward(...params)); //? - I doubt this would work. 
} 

只有我能想到的方式將需要手動解包... PARAMS,我還沒有到那裏。有更快的語法可以工作嗎?

回答

103

你會做:

template <typename ...Params> 
void f(Params&&... params) 
{ 
    y(std::forward<Params>(params)...); 
} 

...幾乎說「採取什麼樣的左邊,併爲每個模板參數,因此解壓。」

+0

再加上如何傳遞參數。我認爲教程顯示'void f(Params && ... params)' – UncleBens 2010-05-12 17:32:55

+0

@Uncle:補充,我認爲你是對的。 – GManNickG 2010-05-12 17:36:50

+58

談論像海盜一天,我使用'void f(Ar && ... arg)' – woolstar 2014-01-25 07:41:46

相關問題