日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C++typeof基本應(yīng)用方式解析

C++編程語(yǔ)言可以被看做是C語(yǔ)言的升級(jí)版本。它不但擁有C語(yǔ)言的各種特性,而且還在一些特定方面上有所改進(jìn),使得開(kāi)發(fā)人員在編程中大大提高了開(kāi)發(fā)效率。我們?cè)谶@里會(huì)為大家詳細(xì)講解一下有關(guān)C++ typeof的應(yīng)用方法。

一、基本用法。

1、C++ typeof表達(dá)式。

以下是它列出的用法:

a、取表達(dá)式的值的類型:

 
 
 
  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) ; // “l(fā)ookahead parsing” 

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

b、取表達(dá)式的類型:

 
 
 
  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 

目前好像只有g(shù)cc編譯器支持這個(gè)關(guān)鍵字。

2、auto關(guān)鍵字。

auto在老的語(yǔ)法中,是標(biāo)識(shí)存儲(chǔ)類型的,表明此變量在本代碼塊范圍內(nèi)有效,這是默認(rèn)屬性,可以不寫(xiě),所以感覺(jué)有點(diǎn)多余。

在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; 

看來(lái)它的作用是節(jié)省代碼的,完全可以用C++ typeof代替。

二、使用。

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

在其它場(chǎng)合,它也能派上用場(chǎng)。比如,我前段時(shí)間碰到的一個(gè)問(wèn)題,比如下面一個(gè)普通類:

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

在另一個(gè)類中,想要?jiǎng)?chuàng)建一個(gè)兼容A::test類型的委托(自定義的委托類):

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

好象很容易就完成了。不過(guò)假如我的類A有10個(gè)方法,要在類B中定義10個(gè)委托呢?而且還要應(yīng)對(duì)類A中可能發(fā)生的變化。于是我使用了宏來(lái)輔助產(chǎn)生類B:

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

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

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

試圖使用traits類模板來(lái)分離類型?注意模板類在使用時(shí)必須先給出模板參數(shù),只有模板函數(shù)可以自行推導(dǎo)出模板參數(shù)的類型,而函數(shù)不可能出現(xiàn)在類的聲明中。

好了,廢話不多說(shuō)了,其實(shí)使用C++ typeof是比較簡(jiǎn)單的實(shí)現(xiàn)方法:

 
 
 
  1. template < class T> 
  2. class TypeTraits  
  3. {  
  4. TypeTraits (); // not implemented  
  5. };  
  6. //多個(gè)偏特化版本中的一個(gè)  
  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; 

這是目前我找到的***一個(gè)方法,先記錄下來(lái)。以上就是對(duì)C++ typeof的具體應(yīng)用方法的介紹。

【編輯推薦】

  1. C++ Cstring應(yīng)用方法概述
  2. C++ static關(guān)鍵字詳細(xì)應(yīng)用指南
  3. C++ const變量使用技巧總結(jié)
  4. C++解析#pragma指令具體操作方法詳解
  5. C++類繼承基本概念解析

文章名稱:C++typeof基本應(yīng)用方式解析
分享網(wǎng)址:http://www.dlmjj.cn/article/copgcei.html