成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++ typeof基本應用方式解析

開發 后端
C++ typeof在實際編程中主要就是幫助開發人員獲取表達式的值的類型,并且還能獲取表達式的類型。我們將會在這里為大家詳細介紹其中的內容。

C++編程語言可以被看做是C語言的升級版本。它不但擁有C語言的各種特性,而且還在一些特定方面上有所改進,使得開發人員在編程中大大提高了開發效率。我們在這里會為大家詳細講解一下有關C++ typeof的應用方法。

一、基本用法。

1、C++ typeof表達式。

以下是它列出的用法:

a、取表達式的值的類型:

  1. template< class A, class B> 
  2. function operator*(A a, B b) -> typeof(a*b); // return type last  
  3. // big change: function keyword  
  4. // : and return are obvious alternatives for -> 
  5. template< class A, class B> 
  6. typeof(a*b) operator* (A a, B b) ; // “lookahead parsing” 

typeof(a*b)并不真的計算a*b的值,而是獲得計算的結果類型。

b、取表達式的類型:

  1. template< class A, class B> 
  2. typeof(A*B) operator*(A a, B b); // use typenames  
  3. // not general  
  4. template< class A, class B> 
  5. typeof((*(A*)0)*(*(B*)0)) operator*(A a, B b); // hack 

目前好像只有gcc編譯器支持這個關鍵字。

2、auto關鍵字。

auto在老的語法中,是標識存儲類型的,表明此變量在本代碼塊范圍內有效,這是默認屬性,可以不寫,所以感覺有點多余。

在c++0x中,auto有了新用法,它的作用和C++ typeof相似,用法如下:

  1. template< class A, class B> typeof(a*b) operator*(A a, B b)  
  2. {  
  3. auto x = a*b; // avoid replication of expression/type  
  4. // …  
  5. return x;  
  6. }  
  7. auto glob = x*y; 

看來它的作用是節省代碼的,完全可以用C++ typeof代替。

二、使用。

從上面的基本用法就知道,以往難以處理的不同類型運算問題,它都能輕松處理。

在其它場合,它也能派上用場。比如,我前段時間碰到的一個問題,比如下面一個普通類:

  1. struct A  
  2. {  
  3. int test ();  
  4. }; 

在另一個類中,想要創建一個兼容A::test類型的委托(自定義的委托類):

  1. struct B  
  2. {  
  3. Delegate < int()> test;  
  4. }; 

好象很容易就完成了。不過假如我的類A有10個方法,要在類B中定義10個委托呢?而且還要應對類A中可能發生的變化。于是我使用了宏來輔助產生類B:

  1. BEGIN_DEFINE(B) // struct B{  
  2. METHOD(A,test) // Delegate< ...> test;  
  3. ...  
  4. END_DEFINE() // }; 

METHOD宏就是根據參數中指定的類和方法,產生委托的定義。如何得到A::test的類型?

A::test本身在C++中是個不能確定類型的東西,除非它是static,而&A::test則是一個指針值。還是那個問題,如何得到它的類型?

試圖使用traits類模板來分離類型?注意模板類在使用時必須先給出模板參數,只有模板函數可以自行推導出模板參數的類型,而函數不可能出現在類的聲明中。

好了,廢話不多說了,其實使用C++ typeof是比較簡單的實現方法:

  1. template < class T> 
  2. class TypeTraits  
  3. {  
  4. TypeTraits (); // not implemented  
  5. };  
  6. //多個偏特化版本中的一個  
  7. template < class T, class Ret> 
  8. struct TypeTraits <  Ret(T::*)() > 
  9. {  
  10. typedef Delegate < Ret()> type;  
  11. }; 

上面的METHOD可以定義為:

  1. #define METHOD(T,x) TypeTraits< typeof(&T::x)>::type x; 

這是目前我找到的***一個方法,先記錄下來。以上就是對C++ typeof的具體應用方法的介紹。

【編輯推薦】

  1. C++ Cstring應用方法概述
  2. C++ static關鍵字詳細應用指南
  3. C++ const變量使用技巧總結
  4. C++解析#pragma指令具體操作方法詳解
  5. C++類繼承基本概念解析
責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-02 17:33:17

C++友元函數

2010-02-06 17:27:03

C++ replace

2010-02-06 16:16:01

C++冒泡排序

2010-02-04 17:16:33

C++調用python

2010-02-03 17:23:27

C++使用接口

2010-03-03 16:40:55

Python HTTP

2010-03-03 10:03:55

Python連接Sql

2010-03-03 14:30:05

Python set類

2010-03-03 14:40:37

Python打包方法

2010-03-04 09:27:34

調用Python腳本

2010-02-23 15:58:57

WCF Session

2013-12-12 16:10:21

Lua腳本語言

2010-03-03 16:08:26

Python取得文件列

2010-01-25 13:45:04

Android單選框

2010-03-03 15:17:46

Python調用MyS

2010-07-08 15:24:17

SNMP trap

2010-02-02 17:47:59

C++操作剪貼板

2010-01-21 11:23:58

C++函數調用

2010-03-03 13:22:08

Python正則表達式

2010-02-05 12:57:20

C++ kdevelo
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久免费丝袜 | 欧美一级免费观看 | 五月香婷婷 | 色吊丝在线| 免费观看一级特黄欧美大片 | 日韩欧美在线观看 | 成人看片在线观看 | 欧美一级小视频 | 欧美日韩国产一区二区三区不卡 | 91av在线影院| 成人av免费| 久久久精品一区二区三区四季av | 激情小说综合网 | 91原创视频在线观看 | 精品日韩一区二区三区 | 国产精品久久久久久久久久久久冷 | 成人免费视频网站在线看 | 中文字幕乱码一区二区三区 | 精品美女视频在线观看免费软件 | 中文字幕精品视频在线观看 | 久久亚洲精品国产精品紫薇 | 亚洲午夜视频在线观看 | 国产精品日韩在线观看一区二区 | 男人亚洲天堂 | 久久av网站 | 精品免费国产 | 在线看亚洲 | 热久久国产 | 黄色国产大片 | 亚洲一区二区精品 | 看av片网站| 亚洲精品一二三区 | 免费观看a级毛片在线播放 黄网站免费入口 | 青青久久 | 久久毛片 | 999热精品| 亚洲精品久久久久久一区二区 | 一区二区电影网 | 性一交一乱一伦视频免费观看 | 精品三区| 欧美国产日韩精品 |