中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中typeof如何使用

發布時間:2021-07-20 13:46:48 來源:億速云 閱讀:1181 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關C++中typeof如何使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、基本用法。

1、C++ typeof表達式。

以下是它列出的用法:

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

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

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

b、取表達式的類型:

template< class A, class B> typeof(A*B) operator*(A a, B b); // use typenames  // not general  template< class A, class B> typeof((*(A*)0)*(*(B*)0)) operator*(A a, B b); // hack

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

2、auto關鍵字。

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

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

template< class A, class B> typeof(a*b) operator*(A a, B b)  {  auto x = a*b; // avoid replication of expression/type  // &hellip;  return x;  }  auto glob = x*y;

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

二、使用。

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

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

struct A  {  int test ();  };

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

struct B  {  Delegate < int()> test;  };

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

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

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

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

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

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

template < class T> class TypeTraits  {  TypeTraits (); // not implemented  };  //多個偏特化版本中的一個  template < class T, class Ret> struct TypeTraits <  Ret(T::*)() > {  typedef Delegate < Ret()> type;  };

上面的METHOD可以定義為:

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

以上就是C++中typeof如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南召县| 罗源县| 芮城县| 汨罗市| 锡林浩特市| 太和县| 彰化县| 柳河县| 海晏县| 建昌县| 湘乡市| 陕西省| 酉阳| 临漳县| 临邑县| 文登市| 宁津县| 禹州市| 莱州市| 新干县| 海安县| 兴安盟| 多伦县| 新宾| 盐源县| 郎溪县| 新巴尔虎左旗| 石棉县| 浦城县| 张北县| 柳州市| 乌兰察布市| 教育| 兖州市| 界首市| 宁陕县| 法库县| 上林县| 连州市| 正宁县| 古浪县|