簡體   English   中英

使用自動類型參數轉發 c++ 函數

[英]forwarding in c++ functions with auto type parameters

對於使用模板參數的轉發函數,習慣用法是使用typename T進行轉發,例如

template <typename T>
void fwd(T &&x) { 
  some_func(std::forward<T>(x));
}

使用采用自動類型參數的轉發 function(或 lambda)時的等效方法:

void fwd(auto &&x) { 
   some_func(std::forward<decltype(x)>(x));
}

在上面的decltype(x)中,不一定與前面示例中的T類型相同。 例如fwd(3)T推斷為intdecltype(x)int&&

有人可以解釋為什么我們在一種情況下使用T而不是decltype(x)作為上面std::forward的模板參數嗎? 基於std::forward的實現,最終結果是否始終保證相同?

void fwd(auto &&x)template <typename T> void fwd(T &&x)的 c++20 簡寫。 但在這種情況下,您沒有類型可供參考。 你可以這樣寫:

void fwd(auto &&x) { 
   using T = std::remove_reference_t<decltype(x)>;
   some_func(std::forward<T>(x));
}

這里 T 等於原始版本中的 T,但無關緊要。 std::forward<T>std::forward<std::remove_reference_t<T>>是相等的,因為它的簽名定義如下:

template< class T >
constexpr T&& forward( std::remove_reference_t<T>&& t ) noexcept;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM