std::decay
是 C++ 標準庫中的一個模板元函數,用于將給定類型轉換為其對應的“衰減”類型。這通常意味著從給定類型中移除 cv 限定符(const 和 volatile),并將數組和函數類型轉換為相應的指針類型。std::decay
主要用于實現泛型編程和類型推導。
以下是如何在 C++ 中使用 std::decay
進行類型萃取的示例:
#include<iostream>
#include <type_traits>
template<typename T>
void printType() {
// 使用 std::decay 獲取 T 的衰減類型
using DecayedT = typename std::decay<T>::type;
// 打印原始類型和衰減后的類型
std::cout << "Original type: "<< typeid(T).name()<< std::endl;
std::cout << "Decayed type: "<< typeid(DecayedT).name()<< std::endl;
}
int main() {
int a[10];
void func() {}
printType<int>(); // 輸出:Original type: i, Decayed type: i
printType<const int&>(); // 輸出:Original type: i, Decayed type: i
printType<int[10]>(); // 輸出:Original type: A10_i, Decayed type: Pi
printType<decltype(func)>();// 輸出:Original type: FvvE, Decayed type: PFvvE
return 0;
}
注意:上述代碼中的 typeid(...).name()
返回的類型名稱取決于具體的編譯器實現,可能會得到不同的結果。因此,為了清晰起見,我使用了簡化的類型名稱。在實際使用中,你可能需要使用更復雜的方法來獲取更易讀的類型名稱。
另外,請注意,std::decay
不會將類類型轉換為指針類型。如果你想要獲取任何類型的指針類型,你可以使用 std::add_pointer
或直接在類型后面添加 *
。