青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
從http://www.digitalmars.com/d/cpptod.html摘錄

1、構造函數:
c++:
1 class Foo
2 {
3     Foo(int x); 
4 };
d:
1 class Foo
2 {
3     this(int x) { } 
4 }

2、基類初始化
c++:
1 class A { A() { } };
2 class B : A
3 {
4      B(int x)
5     : A()        // call base constructor 
6      {    
7      }
8 };
d:
1 class A { this() {  } }
2 class B : A
3 {
4      this(int x)
5      {    
6     super();    // call base constructor 
7     
8      }
9 }
d還支持構造函數里面調用另一個構造函數,當然不能交叉調用,否則會死循環,d編譯器會阻止你這么做。
 1 class A
 2 {    int a = 7;
 3     int b;
 4     this() { b = foo(); } 
 5     this(int x)
 6     {
 7         this();
 8         a = x;
 9     }
10 }
上面的a=7會在構造函數內其它代碼調用之前執行。

3、結構:
c++:
 1 #include <string.h>
 2 
 3 struct A x, y;
 4 
 5 inline bool operator==(const A& x, const A& y)
 6 {
 7     return (memcmp(&x, &y, sizeof(struct A)) == 0); 
 8 }
 9 
10 if (x == y)
11     
d:
1 A x, y;
2 
3 if (x == y) 
4     
5 

4、typedef定義新類型:
c:
1 #define HANDLE_INIT    ((Handle)(-1))
2 typedef void *Handle;
3 void foo(void *);
4 void bar(Handle);
5 
6 Handle h = HANDLE_INIT;
7 foo(h);            // coding bug not caught 
8 bar(h);            // ok
c++:(加入自動初始化)
 1 #define HANDLE_INIT    ((void *)(-1)) 
 2 struct Handle
 3 {   void *ptr;
 4 
 5     // default initializer
 6     Handle() { ptr = HANDLE_INIT; }
 7 
 8     Handle(int i) { ptr = (void *)i; }
 9 
10     // conversion to underlying type 
11     operator void*() { return ptr; }
12 };
13 void bar(Handle);
14 
15 Handle h;
16 bar(h);
17 = func();
18 if (h != HANDLE_INIT)
19     
d:
1 typedef void *Handle = cast(void *)-1
2 void bar(Handle);
3 
4 Handle h;
5 bar(h);
6 = func();
7 if (h != Handle.init)

5、友元:
c++:
 1 class A
 2 {
 3     private:
 4     int a;
 5 
 6     public:
 7     int foo(B *j);
 8     friend class B;
 9     friend int abc(A *);
10 };
11 
12 class B
13 {
14     private:
15     int b;
16 
17     public:
18     int bar(A *j);
19     friend class A;
20 };
21 
22 int A::foo(B *j) { return j->b; }
23 int B::bar(A *j) { return j->a; } 
24 
25 int abc(A *p) { return p->a; }
d:(d語言中,同一模塊隱含友元聲明)
 1 module X;
 2 
 3 class A
 4 {
 5     private:
 6     static int a;
 7 
 8     public:
 9     int foo(B j) { return j.b; }
10 }
11 
12 class B
13 {
14     private:
15     static int b;
16 
17     public:
18     int bar(A j) { return j.a; } 
19 }
20 
21 int abc(A p) { return p.a; }

6、操作符重載:
c++:
 1 struct A
 2 {
 3     int operator <  (int i);
 4     int operator <= (int i);
 5     int operator >  (int i);
 6     int operator >= (int i);
 7 };
 8 
 9 int operator <  (int i, A &a) { return a >  i; }
10 int operator <= (int i, A &a) { return a >= i; }
11 int operator >  (int i, A &a) { return a <  i; }
12 int operator >= (int i, A &a) { return a <= i; } 
d:
1 struct A
2 {
3     int opCmp(int i); 
4 }

7、命名空間以及using聲明:
c++:
1 namespace Foo 
2 {
3     int x;
4 }
5 using Foo::x;
d:
1 /** Module Foo.d **/
2 module Foo;
3 int x;
1 /** Another module **/ 
2 import Foo;
3 alias Foo.x x;

8、RAII(資源獲得即初始化)
c++:
class File
{   Handle 
*h;

    
~File()
    {
    h
->release(); 
    }
};
d:(使用auto關鍵字)
auto class File
{   Handle h;

    
~this()
    {
    h.release();
    }
}

void test()
{
    
if ()
    {   auto File f 
= new File();
    
    } 
// f.~this() gets run at closing brace, even if 
      
// scope was exited via a thrown exception
}

9、屬性:
c++:
 1 class Abc
 2 {
 3   public:
 4     void setProperty(int newproperty) { property = newproperty; } 
 5     int getProperty() { return property; }
 6 
 7   private:
 8     int property;
 9 };
10 
11 Abc a;
12 a.setProperty(3);
13 int x = a.getProperty();
d:
 1 class Abc
 2 {
 3     // set 
 4     void property(int newproperty) { myprop = newproperty; }
 5 
 6     // get
 7     int property() { return myprop; }
 8 
 9   private:
10     int myprop;
11 }
12 
13 Abc a;
14 a.property = 3;        // equivalent to a.property(3)
15 int x = a.property;    // equivalent to int x = a.property() 

10、遞歸模板:
c++:(經典的階乘模板)
 1 template<int n> class factorial
 2 {
 3     public:
 4     enum { result = n * factorial<- 1>::result }; 
 5 };
 6 
 7 template<> class factorial<1>
 8 {
 9     public:
10     enum { result = 1 };
11 };
12 
13 void test()
14 {
15     printf("%d\n", factorial<4>::result); // prints 24
16 }
d:(d語言中,實例化模板時,與模板名同名的類、函數、變量等會自動成為實例化模板的值,說著不太順,大致是這么個意思。。)
 1 template factorial(int n)
 2 {
 3     enum { factorial = n * .factorial!(n-1) }
 4 }
 5 
 6 template factorial(int n : 1)
 7 {
 8     enum { factorial = 1 }
 9 }
10 
11 void test()
12 {
13     printf("%d\n", factorial!(4));    // prints 24 
14 }

11、元編程:
c++:
 1 #include <limits.h>
 2 
 3 template< int nbits > struct Integer
 4 {
 5     typedef Integer< nbits + 1 > :: int_type int_type ;
 6 } ;
 7 
 8 struct Integer< 8 >
 9 {
10     typedef signed char int_type ;
11 } ;
12 
13 struct Integer< 16 > 
14 {
15     typedef short int_type ;
16 } ;
17 
18 struct Integer< 32 > 
19 {
20     typedef int int_type ;
21 } ;
22 
23 struct Integer< 64 >
24 {
25     typedef long long int_type ;
26 } ;
27 
28 // If the required size is not supported, the metaprogram
29 // will increase the counter until an internal error is
30 // signaled, or INT_MAX is reached. The INT_MAX 
31 // specialization does not define a int_type, so a 
32 // compiling error is always generated
33 struct Integer< INT_MAX >
34 {
35 } ;
36 
37 // A bit of syntactic sugar
38 #define Integer( nbits ) Integer< nbits > :: int_type 
39 
40 #include <stdio.h>
41 
42 int main()
43 {
44     Integer( 8 ) i ;
45     Integer( 16 ) j ;
46     Integer( 29 ) k ;
47 
48     Integer( 64 ) l ;
49     printf("%d %d %d %d\n",
50     sizeof(i), sizeof(j), sizeof(k), sizeof(l)); 
51     return 0 ;
52 }
boost:
 1 #include <boost/mpl/if.hpp>
 2 #include <boost/mpl/assert.hpp>
 3 
 4 template <int nbits> struct Integer
 5     : mpl::if_c<(nbits <= 8), signed char
 6     , mpl::if_c<(nbits <= 16), short
 7     , mpl::if_c<(nbits <= 32), long
 8     , long long>::type >::type >
 9 {
10     BOOST_MPL_ASSERT_RELATION(nbits, <=64);
11 }
12 
13 #include <stdio.h>
14 
15 int main()
16 {
17     Integer< 8 > i ;
18     Integer< 16 > j ;
19     Integer< 29 > k ;
20     Integer< 64 > l ;
21     printf("%d %d %d %d\n",
22     sizeof(i), sizeof(j), sizeof(k), sizeof(l)); 
23     return 0 ;
24 }
d:
 1 template Integer(int nbits)
 2 {
 3     static if (nbits <= 8)
 4     alias byte Integer;
 5     else static if (nbits <= 16)
 6     alias short Integer;
 7     else static if (nbits <= 32)
 8     alias int Integer;
 9     else static if (nbits <= 64)
10     alias long Integer;
11     else
12     static assert(0);
13 }
14 
15 int main()
16 {
17     Integer!(8) i ;
18     Integer!(16) j ;
19     Integer!(29) k ;
20     Integer!(64) l ;
21     printf("%d %d %d %d\n",
22     i.sizeof, j.sizeof, k.sizeof, l.sizeof); 
23     return 0;
24 }

12、type traits(類型萃?。?br> c++:(也算是經典的,函數類型判斷)
template<typename T> class IsFunctionT
{
    
private:
    typedef 
char One;
    typedef 
struct { char a[2]; } Two;
    template
<typename U> static One test();
    template
<typename U> static Two test(U (*)[1]);
    
public:
    
enum { Yes = sizeof(IsFunctionT<T>::test<T>(0)) == 1 };
};

void test()
{
    typedef 
int (fp)(int);

    assert(IsFunctionT
<fp>::Yes == 1);
}
d:
 1 template IsFunctionT(T)
 2 {
 3     static if ( is(T[]) )
 4     const int IsFunctionT = 1;
 5     else
 6     const int IsFunctionT = 0;
 7 }
 8 
 9 void test()
10 {
11 
12     typedef int fp(int);
13 
14     assert(IsFunctionT!(fp) == 1);
15 }
還有更簡單點的:
void test()
{
    typedef 
int fp(int);

    assert( 
is(fp == function) );
}


posted on 2006-03-14 12:10 qiezi 閱讀(464) 評論(0)  編輯 收藏 引用 所屬分類: D
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区视频| 久久久久久噜噜噜久久久精品| 国产真实精品久久二三区| 亚洲激情在线激情| 国产欧美精品在线观看| 亚洲国产一区在线观看| 精品粉嫩aⅴ一区二区三区四区| 99riav1国产精品视频| 伊人久久亚洲影院| 欧美一级片在线播放| 亚洲一区二区伦理| 欧美日韩成人一区二区| 欧美激情视频在线播放| 一区二区三区我不卡| 欧美亚洲综合网| 性欧美大战久久久久久久免费观看 | 性欧美暴力猛交69hd| 中文网丁香综合网| 欧美日韩国产综合新一区| 亚洲国产精品va在线观看黑人| 国产一区清纯| 午夜日韩在线| 欧美在线视频二区| 国产精品一区二区久激情瑜伽| 99re6这里只有精品视频在线观看| 亚洲欧洲日本一区二区三区| 久久女同互慰一区二区三区| 久久夜色精品| 狠狠色香婷婷久久亚洲精品| 久久精品夜色噜噜亚洲aⅴ| 久久久99国产精品免费| 国产午夜亚洲精品不卡| 午夜免费久久久久| 久久久亚洲国产天美传媒修理工| 国产日韩精品在线| 久久大逼视频| 欧美.日韩.国产.一区.二区| 亚洲第一久久影院| 欧美高清视频一区二区三区在线观看| 欧美国产一区二区三区激情无套| 亚洲国产91| 欧美精品在线看| 一本久道久久综合婷婷鲸鱼| 午夜久久资源| 黄色成人av在线| 美腿丝袜亚洲色图| 一区二区欧美日韩视频| 性色av一区二区三区在线观看 | 国产精品亚发布| 午夜伦理片一区| 欧美va天堂| 一本色道久久88精品综合| 国产精品九九| 久久精品五月| 亚洲精品在线视频观看| 亚洲欧美日韩国产中文在线| 国产真实乱偷精品视频免| 久久亚洲精品一区二区| 亚洲激情一区二区| 欧美怡红院视频一区二区三区| 一色屋精品视频免费看| 欧美激情亚洲| 香蕉av福利精品导航| 欧美激情精品久久久久久大尺度| 宅男精品视频| 伊人激情综合| 国产精品成人免费视频 | 国产欧美日韩一区二区三区| 久久久五月婷婷| 中日韩在线视频| 男人的天堂亚洲在线| 亚洲欧美日韩在线播放| 亚洲第一免费播放区| 国产精品免费小视频| 蜜桃av一区二区三区| 亚洲一区在线观看视频| 欧美华人在线视频| 久久精品99| 亚洲男人的天堂在线aⅴ视频| 在线观看久久av| 国产欧亚日韩视频| 欧美日韩国产色综合一二三四| 久久偷看各类wc女厕嘘嘘偷窃| 在线视频精品一| 亚洲区欧美区| 欧美xxxx在线观看| 久久狠狠婷婷| 亚洲女优在线| 在线综合亚洲| 日韩视频不卡| 最近中文字幕日韩精品| 国产一区二区三区高清在线观看| 欧美日韩在线观看视频| 欧美1级日本1级| 久久视频在线视频| 欧美一级二级三级蜜桃| 中文在线资源观看网站视频免费不卡| 亚洲成人在线网| 欧美视频不卡| 欧美理论电影在线播放| 麻豆9191精品国产| 久久一区二区三区四区| 欧美在线播放| 欧美中文字幕第一页| 亚洲欧美日韩在线播放| 亚洲无线视频| 亚洲少妇自拍| 亚洲一级一区| 亚洲自拍电影| 性xx色xx综合久久久xx| 亚洲欧美视频一区二区三区| 亚洲午夜电影网| 亚洲小视频在线| 亚洲午夜免费视频| 亚洲综合色婷婷| 亚洲欧美视频在线观看视频| 午夜精品久久久久久久99水蜜桃| 在线视频亚洲一区| 亚洲小视频在线观看| 亚洲一区二区四区| 欧美一区二区三区视频免费| 午夜精品一区二区三区在线| 先锋影音国产精品| 久久精品人人做人人爽| 久久久久青草大香线综合精品| 久久久久国产精品人| 欧美 日韩 国产在线 | 欧美日韩八区| 国产精品久久久久久户外露出| 国产精品亚洲视频| 国内成人精品视频| 亚洲高清不卡av| 一区二区三区国产在线| 亚洲自拍都市欧美小说| 久久精品国产第一区二区三区最新章节| 久久国产直播| 亚洲二区在线视频| 亚洲一区二区三区成人在线视频精品| 亚洲综合日韩中文字幕v在线| 久久久久久网站| 欧美片第1页综合| 国产精品亚洲综合一区在线观看| 在线播放日韩欧美| 亚洲无玛一区| 久久久久久一区二区| 欧美高清在线精品一区| 99亚洲一区二区| 久久精品国产2020观看福利| 欧美人与性动交a欧美精品| 国产精品私人影院| 91久久午夜| 久久国产精彩视频| 91久久国产综合久久91精品网站| 亚洲午夜国产一区99re久久 | 国产日韩一区二区三区在线播放 | 亚洲欧美国产毛片在线| 老司机凹凸av亚洲导航| 国产精品久久久久秋霞鲁丝| 在线高清一区| 亚洲欧美在线看| 亚洲国产毛片完整版 | 欧美黑人国产人伦爽爽爽| 国产精品一区2区| 日韩视频专区| 免费看成人av| 亚洲欧美中文另类| 欧美日韩国产一区精品一区| 玉米视频成人免费看| 亚洲欧美日韩国产一区二区| 91久久夜色精品国产网站| 久久se精品一区精品二区| 欧美色精品天天在线观看视频| 在线欧美日韩精品| 久久福利资源站| 亚洲先锋成人| 欧美精品导航| 亚洲欧洲日韩在线| 蜜桃精品一区二区三区| 性做久久久久久久久| 国产精品国产自产拍高清av| 日韩亚洲一区在线播放| 免费观看国产成人| 久久国产精品久久久久久久久久| 国产精品www| 亚洲视频1区2区| 亚洲精品韩国| 欧美成人免费小视频| 亚洲国产精品高清久久久| 久久久国产视频91| 午夜电影亚洲| 国产日本精品| 久久国产精品久久久久久电车 | 免费成人在线观看视频| 狠狠久久婷婷| 久久亚洲精品视频| 久久久久久伊人| 亚洲国产精品va在线观看黑人 | 亚洲第一天堂av| 欧美高清日韩| 一本色道久久|