在 C++ 中,std::decay
是一個模板元函數,它可以將給定的類型轉換為其對應的基本類型。這在處理 STL 容器時非常有用,因為它可以幫助我們確保傳遞給容器的類型是正確的。
當你想要將一個類型存儲到 STL 容器中時,你需要確保該類型是可復制或可移動的。std::decay
可以幫助我們實現這一點。例如,如果你有一個 const
類型或者引用類型,std::decay
會將其轉換為相應的非 const
、非引用類型。
下面是一個簡單的示例,展示了如何將 std::decay
與 std::vector
結合使用:
#include<iostream>
#include<vector>
#include <type_traits>
template<typename T>
void add_to_vector(std::vector<typename std::decay<T>::type>& vec, T&& value) {
vec.push_back(std::forward<T>(value));
}
int main() {
std::vector<int> vec;
int a = 42;
const int b = 100;
int& c = a;
add_to_vector(vec, a); // 添加 int 類型
add_to_vector(vec, b); // 添加 const int 類型,std::decay 將其轉換為 int
add_to_vector(vec, c); // 添加 int& 類型,std::decay 將其轉換為 int
for (const auto& elem : vec) {
std::cout<< elem << " ";
}
return 0;
}
在這個示例中,我們定義了一個名為 add_to_vector
的函數,它接受一個 std::vector
和一個值作為參數。我們使用 std::decay
來確保傳遞給 std::vector
的類型是正確的。然后,我們使用 std::forward
來完美轉發值,以便在可能的情況下進行移動語義優化。
這樣,我們就可以將不同類型(如 int
、const int
和 int&
)的值添加到 std::vector
中,而無需擔心類型不匹配的問題。