C++ 模板:代码重用和灵活性 - 类模板和函数模板实例
C++\u7684\u6a21\u677f\u662f\u4e00\u79cd\u901a\u7528\u7684\u7f16\u7a0b\u5de5\u5177\uff0c\u5b83\u53ef\u4ee5\u7528\u6765\u521b\u5efa\u901a\u7528\u7684\u6570\u636e\u7c7b\u578b\u6216\u8005\u51fd\u6570\u3002\u6a21\u677f\u5141\u8bb8\u7f16\u7a0b\u5458\u5199\u51fa\u53ef\u4ee5\u9002\u7528\u4e8e\u591a\u79cd\u6570\u636e\u7c7b\u578b\u7684\u4ee3\u7801\uff0c\u800c\u4e14\u63d0\u9ad8\u4ee3\u7801\u7684\u91cd\u7528\u6027\u548c\u7075\u6d3b\u6027\u3002\n\n\u6a21\u677f\u53ef\u4ee5\u7528\u4e8e\u521b\u5efa\u7c7b\u6a21\u677f\u548c\u51fd\u6570\u6a21\u677f\u3002\n\n\u7c7b\u6a21\u677f\u662f\u4e00\u79cd\u901a\u7528\u7684\u7c7b\u5b9a\u4e49\uff0c\u5176\u4e2d\u7684\u67d0\u4e9b\u6210\u5458\u53ef\u4ee5\u6839\u636e\u7528\u6237\u6307\u5b9a\u7684\u6570\u636e\u7c7b\u578b\u8fdb\u884c\u5f00\u59cb\u5316\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u4e00\u79cd\u901a\u7528\u7684\u5bb9\u5668\u7c7b\u6a21\u677f\uff0c\u5b83\u53ef\u4ee5\u5b58\u50a8\u4efb\u610f\u7c7b\u578b\u7684\u6570\u636e\u3002\n\n\u51fd\u6570\u6a21\u677f\u662f\u4e00\u79cd\u901a\u7528\u7684\u51fd\u6570\u5b9a\u4e49\uff0c\u5176\u4e2d\u7684\u67d0\u4e9b\u51fd\u6570\u53c2\u6570\u548c\u8fd4\u56de\u503c\u53ef\u4ee5\u6839\u636e\u7528\u6237\u6307\u5b9a\u7684\u6570\u636e\u7c7b\u578b\u8fdb\u884c\u5f00\u59cb\u5316\u3002\u4f8b\u5982\uff0c\u53ef\u4ee5\u521b\u5efa\u4e00\u79cd\u901a\u7528\u7684\u6392\u5e8f\u51fd\u6570\u6a21\u677f\uff0c\u5b83\u53ef\u4ee5\u5bf9\u4efb\u610f\u7c7b\u578b\u7684\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u3002\n\n\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u7c7b\u6a21\u677f\u548c\u51fd\u6570\u6a21\u677f\u7684\u4f8b\u5b50\uff1a\n\ncpp\n// \u7c7b\u6a21\u677f\ntemplate \u3c typename T \u3e\nclass MyContainer {\npublic:\n MyContainer(T value) : data(value) {}\n T getValue() { return data; }\nprivate:\n T data;\n};\n\n// \u51fd\u6570\u6a21\u677f\ntemplate \u3c typename T \u3e\nvoid swap(T\u0026 a, T\u0026 b) {\n T temp = a;\n a = b;\n b = temp;\n}\n\nint main() {\n // \u4f7f\u7528\u7c7b\u6a21\u677f\n MyContainer\u3c int \u3e container(10);\n int value = container.getValue();\n std::cout \u3c\u3c value \u3c\u3c std::endl;\n\n // \u4f7f\u7528\u51fd\u6570\u6a21\u677f\n int a = 1, b = 2;\n swap(a, b);\n std::cout \u3c\u3c a \u3c\u3c " " \u3c\u3c b \u3c\u3c std::endl;\n\n return 0;\n}\n\n\n\u5728\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c\u7c7b\u6a21\u677fMyContainer\u5b9a\u4e49\u4e86\u4e00\u79cd\u901a\u7528\u7684\u5bb9\u5668\u7c7b\uff0c\u53ef\u4ee5\u5b58\u50a8\u4efb\u610f\u7c7b\u578b\u7684\u6570\u636e\u3002\u51fd\u6570\u6a21\u677fswap\u5b9a\u4e49\u4e86\u4e00\u79cd\u901a\u7528\u7684\u4ea4\u6362\u51fd\u6570\uff0c\u53ef\u4ee5\u7528\u4e8e\u4ea4\u6362\u4efb\u610f\u7c7b\u578b\u7684\u53d8\u91cf\u3002\n\n\u4f7f\u7528\u6a21\u677f\u65f6\uff0c\u9700\u8981\u5728\u6a21\u677f\u53c2\u6570\u524d\u52a0\u4e0atypename\u6216class\u5173\u952e\u8bcd\uff0c\u5e76\u4e14\u5728\u5b9a\u4e49\u6216\u4f7f\u7528\u6a21\u677f\u65f6\u63d0\u4f9b\u5b9e\u9645\u7684\u7c7b\u578b\u53c2\u6570\u3002\u5728\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\uff0cMyContainer\u3c int \u3e\u5f00\u59cb\u5316\u4e86\u4e00\u4e2a\u5b58\u50a8\u6574\u6570\u7684\u5bb9\u5668\u7c7b\uff0cswap(a, b)\u5f00\u59cb\u5316\u4e86\u4e00\u4e2a\u4ea4\u6362\u6574\u6570\u7684\u51fd\u6570\u3002
原文地址: https://www.cveoy.top/t/topic/qgcB 著作权归作者所有。请勿转载和采集!