C++ 模板全特化和偏特化
/***************************************************
1. 模板特化按物件型別(類和全域性函式)分為兩種: 類模板的特化和全域性模板函式的特化;2. 按特化的型別分全特化和偏特化(也就是多個模板引數可以選定只特化一個或者多個),全域性模板函式的特化不支援偏特化;
3. 全域性模板函式的特化需要關注幾個重要元素函式返回值 函式名 形參型別、個數和順序,eg:
template <class T> T max_(const T &, const T &)
4. 類模板的特化需要關注幾個重要元素類名,形參型別和個數,形參的順序倒不重要了;
****************************************************/
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
template <class T> T max_(const T &a, const T &b)
{
return a > b ? a : b;
}
//全特化引數的型別和順序都需要
template <> const char* max_(const char* const &a,const char* const &b)
{
return strcmp(a,b) >= 0 ? a : b;
}
template <class T,class P> struct A
{
A(const T &a,const P &b)
{
std::cout<<"類模板無特化,"<<"a:"<<a<<",b:"<<b<<endl;
}
};
template <> struct A <const char *,int>
{
A(const char *a,int b)
{
std::cout<<"類模板全特化,"<<"a:"<<a<<",b:"<<b<<endl;
}
};
template <class T> struct A <const T&,int>
{
A(const T& a,int b)
{
std::cout<<"類模板偏特化,"<<"a:"<<a<<",b:"<<b<<endl;
}
};
int main(int argc,char *argv[])
{
int a = 111,b = 222;
std::cout<<max_(a,b)<<endl;
const char * p1 = "aaa",* p2= "bbb";
std::cout<<max_(p1,p2)<<endl;
std::string s1 = "ccc",s2 = "ddd";
std::cout<<max_(s1,s2)<<endl;
A<int,int> a1(a,b);
A<const char *,int> a2(p1,b);
A<const std::string&,int> a3(s1,b);
return 0;
}
/*
[
222
bbb
ddd
類模板無特化,a:111,b:222
類模板全特化,a:aaa,b:222
類模板偏特化,a:ccc,b:222
*/
相關推薦
C++ 模板全特化和偏特化
/*************************************************** 1. 模板特化按物件型別(類和全域性函式)分為兩種: 類模板的特化和全域性模板函式的特化; 2. 按特化的型別分全特化和偏特化(也就是多個模板引數可以選定只特化一個或
類模板的全特化和偏特化
#include <stdio.h> #include <iostream> template<typename T1,typename T2> class A { public: A(T1 self_str1,T2 self_str2
模板的特化和偏特化
模板在C++中可謂是一個極其重要的特性,可謂是構成C++設計思想的靈魂部分,所謂的泛型程式設計就是模版的一種體現。但是呢,作為C++如此重要的特性,其實在平時工作當中用到的並不多。或者說我們平時工作只用到了其中的一部分,而其實模板的內容也很豐富。
template之全特化和偏特化
前言 關於講過traits萃取器的時候探討到偏特化的概念, 而在那一篇文章也沒有具體解釋偏特化是什麼, 怎麼實現, 所以可能在第一次看得時候會很莫名其妙. 所以我將偏特化放在其後講解, 為不明白的朋友做一個淺析的講解. 這裡我先聊一下全特化再聊偏特化. 全特化 全特化的模板引
模板的特化和偏特化以及相關理解
寫在前面: 主要是對於模板的特化和偏特化做一個總結以及個人的理解。 為什麼需要特化或者偏特化: 模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。 對於一般的類模板,模板引數T是在編譯的時候編譯器根據
C++模板 全特化、偏特化
C++模板 全特化、偏特化 模板 模板的定義:模板就是實現程式碼重用機制的一種工具,它可以實現型別引數化,即把型別定義為引數, 從而實現了真正的程式碼可重用性。 模版可以分為兩類,一個是 函式模版 ,另外一個是 類模版。 函式模板,類模板樣例: /** * 作者:lyn
c++模板、模板的全特化與偏特化
1. c++模板的一般使用方法 1. 類模板 #include<iostream> using namespace std; template <typename T> class MyClass { public: MyClass <T>
C++模板全特化、偏特化
https://blog.csdn.net/m_buddy/article/details/72973207 1. C++模板 大家都對C++的模板程式設計應該都能很熟練使用了,下面就是一段很簡單不過的例子了 //模板函式 &nbs
[轉]C++中模板的特化與偏特化
解析 匹配規則 創意 復雜 href 靈活 類模板特化 總結 行存儲 轉載自:http://hi.baidu.com/klcdyx2008/blog/item/5adbf77b79f316f90bd1873c.html 1.引言C++中的模板分為類模板和函數模板,雖然它引進
C++模板特化與偏特化
type 舉例 its 進一步 數據類型 類型 orm special template C++模板說到C++模板特化與偏特化,就不得不簡要的先說說C++中的模板。我們都知道,強類型的程序設計迫使我們為邏輯結構相同而具體數據類型不同的對象編寫模式一致的代碼,而無法抽取其中的
C++ 模板全特化中的函式特化
轉載:http://blog.csdn.net/rain_qingtian/article/details/15815251 [cpp] view plain copy print? #include <iostream> usingnames
函式模板全特化與偏特化
模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。 模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。 先看類模板:templa
全特化與偏特化
【全特化與偏特化】 1、普通類模板 template<class T,class N> class Template{}; 2、全特化。 template<> class Template<int,char>{}; 3、偏特化。
模板類預設引數,模板類的特化,偏特化, 模板成員函式,模板的專用化例子
#include "stdio.h" #include "stdlib.h" #include <typeinfo> #include <iostream> using namespace std; class Sample2 { public:
類模板的特化,偏特化
template <typename T1, typename T2> class MyClass { ... }; 以下數種形式的偏特化都是合理的: // 偏特化:兩個 template parameter 相同 template <typename T> class MyClas
C# Json序列化和反序列化
ava script brush arp turn bject new c# 序列化 using System.Web.Script.Serialization; public class JsonHelper { public static string Ob
C#中怎樣實現序列化和反序列化
image .com 合並 小白 str mat get new ons 我們想要將數據進行持久化的操作的話,也就是將數據寫入到文件中,我們在C#中可以通過IO流來操作,同時也可以通過序列化來操作,本人是比較推薦使用序列化操作的 因為我們如果想要將一個對象持久化到文件中
C#模板設計模式使用和學習心得
傳統 oracle 設計模式 管理系統 邏輯 導致 www. 離開 不回 模板設計模式: 模版方法模式由一個抽象類和一個(或一組)實現類通過繼承結構組成,抽象類中的方法分為三種: 抽象方法:父類中只聲明但不加以實現,而是定義好規範,然後由它的子類去實現。
C#XML的序列化和反序列化
最近負責的專案,用到了xml的序列化和反序列化,在此做個記錄以供下次學習使用 前言: 序列化和反序列化就是解析和反解析 序列化:將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程(簡單來說就是將物件轉化為位元組過程) 反序列化:將位元組序列轉化為物件的過程
C#中的序列化和反序列化問題
1,簡述:序列化和反序列化主要作用就是方便類檔案在網路中的傳輸 序列化:將物件轉換成為二進位制的流檔案 &nb