函數模板編程

來源:互聯網
上載者:User

Common.h

#ifndef _COMMON_H_<br />#define _COMMON_H_<br />/*<br />函數模板<br />全部採用包含編譯模型<br />*/<br />/* 函數模板聲明 */<br />template<typename T><br />int Compare(const T& v1, const T& v2);<br />template<typename T><br />int Compare0(T v1, T v2);<br />template<typename T, typename U><br />T Compare1(U v1, U v2);<br />template<typename T, typename U, typename X><br />T Compare2(U v1, X v2);<br />template<typename T><br />int Compare3(const T& v1, const T& v2);<br />template<><br />int Compare0<const char*>(const char* v1, const char* v2);<br />/*<br />模板特化<br />放在標頭檔,避免重複定義<br />*/<br />template<><br />int Compare0<const char*>(const char* v1, const char* v2)<br />{<br />int nRet = 0;<br />nRet = strcmp(v1, v2);<br />return nRet;<br />}<br />#include "Common.cpp"<br />#endif

Common.cpp

#include <string.h><br />template<typename T><br />int Compare(const T& v1, const T& v2)<br />{<br />int nRet = 0;<br />if (v1 > v2)<br />{<br />nRet = 1;<br />}<br />else if(v1 < v2)<br />{<br />nRet = -1;<br />}<br />return nRet;<br />}<br />template<typename T><br />int Compare0(T v1, T v2)<br />{<br />int nRet = 0;<br />if (v1 > v2)<br />{<br />nRet = 1;<br />}<br />else if(v1 < v2)<br />{<br />nRet = -1;<br />}<br />return nRet;<br />}<br />template<typename T, typename U><br />T Compare1(U v1, U v2)<br />{<br />T nRet = 0;<br />if (v1 > v2)<br />{<br />nRet = 1;<br />}<br />else if(v1 < v2)<br />{<br />nRet = -1;<br />}<br />return nRet;<br />}<br />template<typename T, typename U, typename X><br />T Compare2(U v1, X v2)<br />{<br />T nRet = 0;<br />return nRet;<br />}<br />template<typename T><br />int Compare3(const T& v1, const T& v2)<br />{<br />int nRet = 0;<br />if (v1 > v2)<br />{<br />nRet = 1;<br />}<br />else if(v1 < v2)<br />{<br />nRet = -1;<br />}<br />return nRet;<br />}</p><p>

stdafx.cpp

// stdafx.cpp : source file that includes just the standard includes<br />// TemplateStudy.pch will be the pre-compiled header<br />// stdafx.obj will contain the pre-compiled type information<br />#include "stdafx.h"<br />// TODO: reference any additional headers you need in STDAFX.H<br />// and not in this file<br />

stdafx.h

// stdafx.h : include file for standard system include files,<br />// or project specific include files that are used frequently, but<br />// are changed infrequently<br />//<br />#pragma once<br />#ifndef _WIN32_WINNT// Allow use of features specific to Windows XP or later.<br />#define _WIN32_WINNT 0x0501// Change this to the appropriate value to target other versions of Windows.<br />#endif<br />#include <stdio.h><br />#include <tchar.h></p><p>// TODO: reference additional headers your program requires here<br />

TemplateStudy.cpp

// TemplateStudy.cpp : Defines the entry point for the console application.<br />//<br />#include "stdafx.h"<br />#include <iostream><br />using namespace std;<br />#include "Common.h"<br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />cout << Compare(10, 12) << endl;<br />/*<br />多個類型形參的實參必須完全符合<br />一般而言,不會轉換實參以匹配已有的執行個體化,而是會產生新的執行個體<br />例外:編譯器允許兩種轉換<br />1.const轉換<br />2.數組或函數到指標的轉換<br />*/<br />/* cout << Compare(10.2, 12) << endl; error */<br />int nV1 = 10;<br />const int nV2 = 32;<br />cout << Compare0(nV1, nV2) << endl;//const convert</p><p>int a[10];<br />int b[42];<br />cout << Compare0(a, b) << endl;//calls Compare0(int*, int*)</p><p>/* 調用顯示指定模板實參 */<br />int c = 12;<br />int d = 14;<br />cout << Compare1<int>(c, d) << endl;<br />Compare2<int, double, int>(10.1, 11);<br />Compare2<int, int>(10, 23);<br />/* 調用特化的模板函數 */<br />const char* v1 = "1234";<br />const char* v2 = "12345";<br />cout << Compare0(v1, v2) << endl;<br />return 0;<br />}<br />

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.