c/c++ 模板與STL小例子系列<三> traits

来源:https://www.cnblogs.com/xiaoshiwang/archive/2018/09/05/9590029.html
-Advertisement-
Play Games

c/c++ 模板與STL小例子系列 traits 對這個概念,還是處於懵逼的狀態,初步體會就是,為瞭解決類型之間的轉換問題。 從一個類型為A的指針,轉化到類型為B的指針,中間需要用void 來作為中介。traits好像可以解決這種問題。 下麵弄了3個小例子,可以初步感受一下。 例子1: ...


c/c++ 模板與STL小例子系列<三> traits

對這個概念,還是處於懵逼的狀態,初步體會就是,為瞭解決類型之間的轉換問題。

從一個類型為A的指針,轉化到類型為B的指針,中間需要用void*來作為中介。traits好像可以解決這種問題。

通過traits技術,可以達到扔進去什麼類型,給我吐出什麼類型

扔進去的是int出來的t1也是int類型

Iterator_1<int>::value_type t1 = 100;

下麵弄了3個小例子,可以初步感受一下。

例子1:

#include <iostream>
using namespace std;

template<typename T, typename U>
class traits{
public:
  typedef T value_type1;
  typedef T& ref1;
  typedef U value_type2;
  typedef U& ref2;
};

template<typename TA, typename UA>
class A : public traits<TA, UA>
{

};

int main(){
  A<int, double>::value_type1 a = 10;
  A<int, double>::ref1 b = a;
  cout << a << endl;
  cout << b << endl;
  A<int, double>::value_type2 a1 = 10.2;
  A<int, double>::ref2 b1 = a1;
  cout << a1 << endl;
  cout << b1 << endl;
}

例子2:

#include <iostream>
using namespace std;
class Test1;
class Test2;

template<typename T>
class TypeTb1{};

template<>
class TypeTb1<Test1>{
public:
  typedef char ret_type;
  typedef int p1_type;
  typedef double p2_type;
};
template<>
class TypeTb1<Test2>{
public:
  typedef double ret_type;
  typedef double p1_type;
  typedef int p2_type;
};
template<typename T>
class Test{
public:
  typename TypeTb1<T>::ret_type func(typename TypeTb1<T>::p1_t\
ype x,
                              typename TypeTb1<T>::p2_type y){
    return x;
  }
};
int main(){
  Test<Test1> t;
  cout << t.func(65, 6.18) << endl;
  Test<Test2> t2;
  cout << t2.func(6.18, 65) << endl;
}

例子3:

#include <iostream>
using namespace std;

class A{
public:
  void show(){cout << "A show" << endl;}
};
template<typename T>
class Iterator_1{
public:
  typedef T value_type;
  typedef value_type* ptn;
  typedef value_type& ref;
};
template<typename T>
class Iterator_2{
public:
  typedef T value_type;
  typedef value_type* ptn;
  typedef value_type& ref;
};

template<typename T>
struct Traits{};

template<typename T>
struct Traits<T *>{
  typedef T value_type;
  typedef value_type* ptn;
  typedef value_type& ref;
};

int main(){
  Iterator_1<int>::value_type t1 = 100;
  cout << t1 << endl;
  Iterator_2<double>::value_type t2 = 1.23;
  cout << t2 << endl;
  Traits<double*>::value_type t3 = 4.45;
  cout << t3 << endl;

  Iterator_1<A>::ptn p;
  p->show();
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • auto-workflow 用於快速構建各種關係圖的庫,比如流程圖,可視化執行流等 github地址:https://github.com/auto-workflow/AWorkflow 快速開始 npm install aworkflow 或者引用dist文件夾下的產出文件 訪問demo npm ...
  • function getnextElement(node){ if(node.nodeType==1) {return node;} if(node.nextSibling){return getnextElement(node.nextSibling) } return null;} ...
  • CAP理論 1. Consistency(一致性), 數據一致更新,所有數據變動都是同步的 2. Availability(可用性), 好的響應性能 3. Partition tolerance(分區容錯性) 可靠性 參考資料: "CAP理論" 服務發現比較 | | consul | zookeep ...
  • 距離上次發文,已經過去了三年半,這幾年技術更新節奏異常迅猛,.Net進入了跨平臺時代,前端也被革命性的顛覆。 回顧 2015年,正當我還沉迷於JQuery + EasyUi的封裝時,突然意識到技術已經過時。 JQuery在面對更加複雜的UI需求時顯得力不從心,EasyUi雖然組件比較完善,但界面風格 ...
  • 源碼: https://github.com/tylike/CIIP https://gitee.com/ciip/CIIP 一,CIIP的目標是什麼? 更加簡單,快速的建立信息類管理系統.讓實施人員可能承擔多數工作,降低開發人員的勞動強度. 二,CIIP改動了哪些? 2016年到本次更新之前,CI ...
  • 序言 在 "《代碼失控與狀態機(上)》" 的文末,我們留了一個解析「成員訪問表達式」的“作業”,那麼,通過本文我們一起來完成這個作業。 首先,為什麼要苦哈哈的寫一個這樣看上去沒什麼用的解析器?因為在某些 IoC 或 AOP 容器中 (不幸的是我需要實現一個這樣的 IoC 容器) ,常需要動態求解成員 ...
  • 一: 什麼是分散式系統 《分散式系統原理與範型》一書中這樣定義分散式系統:“ 分散式系統是若幹獨立電腦的集合,這些電腦對於用戶來說就像是單個相關係統”。 歸納來說就是 : 硬體獨立,軟體統一 。 什麼是硬體獨立 ? 所謂硬體獨立,是指電腦機器本身是獨立的,一個大型的分散式系統,會由若幹台電腦 ...
  • 第一步:準備工作 1、下載並集成公司自定義maven maven包見QQ群文件 2、克隆Git源碼到本地eclipse: xx 3、構建項目 一鍵初始化parent:run as maven install 註意:構建報錯缺少依賴jar ojdbc14-10.2.0.5.0.jar 到 C:\Use ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...