• <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>
            Lyt
            posts - 16,comments - 61,trackbacks - 0

            今天看msdn不小心瞄到C#的動態多維數組,忍不住流口水,如果自己也有一個該有多好,于是就開始動手湊。

            剛開始被如何定義動態多維數組給卡住,我希望用起來像這樣:

            Array<int> LytArray(321);   //以下代碼相當于定義了int[3][2][1];

            可是構造函數的參數個數在使用前無法確定,難道要寫很多個構造函數,于是想了個辦法,把構造函數的參數單獨拿出來做手腳,并為此暗暗興奮=  =

                class ArrayDimension
                {
                
            public:
                    
            int Data[MAX_ARRAY];
                    
            int Dimension;

                    ArrayDimension(
            const int index);
                    ArrayDimension
            & operator,(const int index);
                };


                template
            <typename _Type>
                
            class Array
                {
                
            private:
                    AutoPtr
            <_Type> Data;
                    ArrayDimension DimensionInfo;

                
            public:
                    Array(
            const ArrayDimension Info);
                };

            我以為在編譯Array<int> LytArray(3, 2, 1)時,3會用ArrayDimension來解釋,然后通過重載逗號來解決不知道有多少個參數的問題,事實上失敗了T_T:

            error C2661: 'Lyt::Array<_Type>::Array' : no overloaded function takes 3 arguments 

            具體為什么不給編譯,其實我不怎么明白,僅以此文記錄一時的胡思亂想,歡迎各位來噴~
            posted on 2009-10-11 21:35 Lyt 閱讀(1845) 評論(14)  編輯 收藏 引用 所屬分類: 數據結構

            FeedBack:
            # re: 很傻很天真之Array
            2009-10-12 00:48 | 空明流轉
            沒什么噴的。。。編譯器直接把你咔嚓了。。。
            你要是Array(ArrayDimension(3),2,1)
            說不定就成了。  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 09:19 | Kevin Lynx
            - -|
            重載逗號運算符,不會改變函數中逗號的語義。 - -!
            是用于改變逗號表達式中逗號的語義,如:
            ArrayDimension a;
            a, 1; //逗號表達式
            標準的逗號表達式其實還應該有個返回值。如:
            class Test
            {
            public:
            Test( int i ) : index( i )
            {
            }

            const Test &operator, ( const Test &other )
            {
            return *this;
            }

            private:
            int index;
            };

            Test a( 1 ), b( 2 ), c( 3 );
            c = a, b;

            不懂C#里的動態多維數組,所以對你這里的需求不作評論。:)
            如果要支持不定個數的參數,要么使用C里的...(如printf),要么重載很多版本,即使模板也無法解決這個問題。如果太懶不想寫那么多重載版本,可以考慮用宏自動生成這些代碼。  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 09:41 | 暗涌
            重載逗號。。。。More Effective C++上說,重載這些不推薦重載的操作符,很難得到預期的行為。。。  回復  更多評論
              
            # re: 很傻很天真之Array[未登錄]
            2009-10-12 10:44 | goteet
            可變參數
            <stdarg.h>  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 11:07 | 陳梓瀚(vczh)
            你應該這樣:
            /*NewArray是一個全局變量*/
            Array<int, 3> arrays=NewArray[3][4][5];  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 11:35 | 溪流
            這樣能過:

            class ArrayDimension
            {
            public:
            int Data[MAX_ARRAY];
            int Dimension;

            ArrayDimension();
            ArrayDimension(const int index);
            ArrayDimension(const ArrayDimension &that);
            ArrayDimension& operator,(const int index);
            };


            template<typename _Type>
            class Array
            {
            private:
            ArrayDimension DimensionInfo;

            public:
            Array(const ArrayDimension Info);
            };

            Array<int> arr((3, 2, 1));  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 12:38 | 陳梓瀚(vczh)
            @溪流
            把dimension放到template里面可以有以下效果:
            Array<int, 3>::operator[]返回Array<int, 2>
            Array<int, 2>::operator[]返回Array<int, 1>
            Array<int, 1>::operator[]返回int

            放到構造函數里面想達到這個效果是很麻煩的,而且把一個3維的數組賦值給2維是一件不能接受的事情。  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 13:02 | 溪流
            @陳梓瀚(vczh)

            嗯!這個方法不錯!  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 17:34 | 欲三更
            @陳梓瀚(vczh)
            模板參數只能是常量的前提下, 這樣搞和 intArray[3][4][5];有啥區別?  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 18:21 | 陳梓瀚(vczh)
            @欲三更
            不用常數,你想operator[]的返回類型是什么啊?  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 18:22 | 陳梓瀚(vczh)
            @欲三更
            我這里的常數指的是維度,當然跟尺寸是沒關系的  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 20:09 | Lyt
            @空明流轉
            這樣寫不順眼唉,而且是行不通的,我昨晚試過…  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 20:11 | Lyt
            @暗涌
            我知道最好別重載逗號,可是我也沒希望他到底先算哪個表達式,這樣還有差么?  回復  更多評論
              
            # re: 很傻很天真之Array
            2009-10-12 21:46 | 欲三更
            @陳梓瀚(vczh)
            哦, 你說的是對的, 中看走眼了, 看見123就下意識的一位是尺度.  回復  更多評論
              
            免费精品国产日韩热久久| 国产精品久久久久无码av| 青青草国产97免久久费观看| 亚洲国产成人久久综合一 | 国产精品99精品久久免费| 国产精品福利一区二区久久| 国产巨作麻豆欧美亚洲综合久久| 性高湖久久久久久久久AAAAA| 亚洲国产精品无码久久SM| 精品精品国产自在久久高清| 伊人情人综合成人久久网小说| 久久精品午夜一区二区福利 | 亚洲精品白浆高清久久久久久| www性久久久com| 97精品国产97久久久久久免费| 久久久国产精品网站| 无码人妻久久一区二区三区 | 日日狠狠久久偷偷色综合0| 国产精品一久久香蕉国产线看观看| 久久久久人妻精品一区三寸蜜桃| 无码精品久久久久久人妻中字| 午夜精品久久久久久久无码| 久久精品国产只有精品2020| 亚洲精品无码久久千人斩| 无码人妻久久一区二区三区蜜桃| 91麻精品国产91久久久久 | 久久综合视频网| 久久影院亚洲一区| 久久成人18免费网站| 国产精品日韩深夜福利久久 | 久久99精品久久久久久噜噜| 国产精品久久久久天天影视| 国内精品久久久久伊人av| 色偷偷偷久久伊人大杳蕉| 狠狠综合久久综合88亚洲| 一本久道久久综合狠狠躁AV| 久久国产视频99电影| 久久一区二区三区免费| 亚洲欧洲精品成人久久曰影片 | 久久无码国产专区精品| 国产成人综合久久精品红|