C++ 模板特化是一種強大的功能,它允許你為特定類型或條件提供定制的實現(xiàn)
函數(shù)模板特化允許你為特定類型提供定制的函數(shù)實現(xiàn)。例如,假設(shè)你有一個通用的 add
函數(shù)模板,你可以為某個特定類型(如 std::string
)提供特化實現(xiàn):
#include <iostream>
#include <string>
// 通用實現(xiàn)
template <typename T>
T add(T a, T b) {
return a + b;
}
// std::string 特化實現(xiàn)
template <>
std::string add<std::string>(std::string a, std::string b) {
return a + " " + b;
}
int main() {
std::cout << add(1, 2) << std::endl; // 輸出 3
std::cout << add("Hello, ", "World!") << std::endl; // 輸出 "Hello, World!"
return 0;
}
類模板特化允許你為特定類型提供定制的類實現(xiàn)。例如,假設(shè)你有一個通用的 MyContainer
類模板,你可以為某個特定類型(如 std::vector<int>
)提供特化實現(xiàn):
#include <iostream>
#include <vector>
// 通用實現(xiàn)
template <typename T>
class MyContainer {
public:
void print() {
std::cout << "Generic container" << std::endl;
}
};
// std::vector<int> 特化實現(xiàn)
template <>
class MyContainer<std::vector<int>> {
public:
void print() {
std::cout << "Vector of integers" << std::endl;
}
};
int main() {
MyContainer<int> genericContainer;
genericContainer.print(); // 輸出 "Generic container"
MyContainer<std::vector<int>> vectorContainer;
vectorContainer.print(); // 輸出 "Vector of integers"
return 0;
}
模板偏特化允許你為一組類型提供部分定制的實現(xiàn)。例如,假設(shè)你有一個通用的 MyPair
類模板,你可以為某個特定類型(如 std::pair<int, int>
)提供偏特化實現(xiàn):
#include <iostream>
#include <utility>
// 通用實現(xiàn)
template <typename T1, typename T2>
class MyPair {
public:
void print() {
std::cout << "(" << t1 << ", " << t2 << ")" << std::endl;
}
};
// std::pair<int, int> 偏特化實現(xiàn)
template <>
class MyPair<int, int> {
public:
void print() {
std::cout << "Int pair" << std::endl;
}
};
int main() {
MyPair<int, double> pair1;
pair1.print(); // 輸出 "(int, double)"
MyPair<int, int> pair2;
pair2.print(); // 輸出 "Int pair"
return 0;
}
結(jié)合這些特性,你可以根據(jù)需求為特定類型或條件提供定制的實現(xiàn),從而提高代碼的可讀性和性能。