在Linux環境下使用C++進行模板編程,可以極大地提高代碼的復用性和靈活性。以下是一些在Linux C++中應用模板編程的方法和示例:
函數模板允許你定義一個通用的函數,可以用于多種數據類型。
#include <iostream>
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
std::cout << "Addition of ints: " << add<int>(3, 4) << std::endl;
std::cout << "Addition of doubles: " << add<double>(3.5, 4.5) << std::endl;
return 0;
}
類模板允許你定義一個通用的類,可以用于多種數據類型。
#include <iostream>
template <typename T>
class Array {
private:
T* data;
size_t size;
public:
Array(size_t size) : size(size), data(new T[size]) {}
~Array() {
delete[] data;
}
T& operator[](size_t index) {
return data[index];
}
const T& operator[](size_t index) const {
return data[index];
}
size_t getSize() const {
return size;
}
};
int main() {
Array<int> intArray(5);
intArray[0] = 1;
intArray[1] = 2;
std::cout << "First element of intArray: " << intArray[0] << std::endl;
Array<double> doubleArray(3);
doubleArray[0] = 1.1;
doubleArray[1] = 2.2;
std::cout << "First element of doubleArray: " << doubleArray[0] << std::endl;
return 0;
}
模板特化允許你為特定的數據類型提供專門的實現。
#include <iostream>
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 特化版本 for char*
template <>
const char* max<const char*>(const char* a, const char* b) {
return (strcmp(a, b) > 0) ? a : b;
}
int main() {
std::cout << "Max of ints: " << max(3, 4) << std::endl;
std::cout << "Max of doubles: " << max(3.5, 4.5) << std::endl;
std::cout << "Max of strings: " << max("apple", "banana") << std::endl;
return 0;
}
變參模板允許你定義接受任意數量和類型參數的模板。
#include <iostream>
template <typename... Args>
void print(Args... args) {
(std::cout << ... << args) << std::endl;
}
int main() {
print(1, "hello", 3.14, 'c');
return 0;
}
模板元編程是一種在編譯時執行計算的技術。
#include <iostream>
template <int N>
struct Factorial {
static const int value = N * Factorial<N - 1>::value;
};
template <>
struct Factorial<0> {
static const int value = 1;
};
int main() {
std::cout << "Factorial of 5: " << Factorial<5>::value << std::endl;
return 0;
}
在Linux環境下,你可以使用g++編譯器來編譯和運行這些模板程序。例如:
g++ -o template_example template_example.cpp
./template_example
通過這些方法,你可以在Linux環境下充分利用C++模板編程的優勢,編寫出高效、靈活且可復用的代碼。