[英]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
推斷為int
而decltype(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.