Flink流处理开发实践
2026/7/8 1:41:03
01函数模板
cpp
template <typename T> T add(T a, T b) { return a + b; }02说明:
template <typename T>声明这是一个模板,typename关键字用于定义模板参数T,也可以使用class关键字,二者在这里含义相同。add接受两个类型为T的参数a和b,并返回它们的和。T可以在函数定义中作为普通类型使用。03使用:
cpp
int main() { int result1 = add(3, 5); // 自动推导T为int double result2 = add(3.5, 5.5); // 自动推导T为double return 0; }cpp
int main() { int result = add<int>(3, 5); // 显式指定T为int return 0; }001类模板
cpp
template <typename T> class Stack { private: T* data; int top; int capacity; public: Stack(int size) : capacity(size), top(-1) { data = new T[capacity]; } ~Stack() { delete[] data; } void push(T value) { if (top == capacity - 1) { // 处理栈满情况,可扩容 return; } data[++top] = value; } T pop() { if (top == -1) { // 处理栈空情况 return T(); } return data[top--]; } };002说明:
Stack定义了一个栈结构,其数据成员data是类型为T的指针,用于存储栈中的元素。push和pop成员函数用于操作栈。003使用:
cpp
int main() { Stack<int> intStack(5); intStack.push(10); int value = intStack.pop(); Stack<double> doubleStack(3); doubleStack.push(3.14); double dValue = doubleStack.pop(); return 0; }cpp
template <> std::string add<std::string>(std::string a, std::string b) { return a + b; }template <>表示这是一个模板特化。std::string类型,add函数的行为是字符串拼接,不同于通用模板中数值类型的加法操作。cpp
template <> class Stack<bool> { private: bool* data; int top; int capacity; public: Stack(int size) : capacity(size), top(-1) { data = new bool[capacity]; } ~Stack() { delete[] data; } void push(bool value) { if (top == capacity - 1) { // 处理栈满情况,可扩容 return; } data[++top] = value; } bool pop() { if (top == -1) { // 处理栈空情况 return false; } return data[top--]; } };Stack类模板进行了特化,专门处理bool类型。可以根据bool类型的特点,对类的实现进行优化,比如在存储bool类型时可以采用更紧凑的存储方式等(这里为了简单示例,仅展示了基本结构)。