templateクラスで定数がある配列について

投稿者: user28203

テンプレートクラスでtemplate<class type,int N>template<class type>
template<class type,int N>の場合は配列がオブジェクトに含まれて
template<class type>の場合は配列にオブジェクトに含まれないっていう参考書にあるのですがどういう意味なのでしょうか?

            //配列がオブジェクトに含まれる。
        template<class type,int N> class x {
            type vec[N] = { type() };

        public:
            x(){ }

        void print() {
                int i = 0;
                for(i; i<N; i++)
                cout << vec[i]<<"n";
            }


        int  size() { return N; }

        };

        //配列はオブジェクトに含まれない。
        template<class type> class y {
            int nelem;//要素数
            type *vec;//配列の先頭要素を指すポインタtype型

        public:

            y(int s = 0, type t = type()) :nelem(s) {

                vec = new type[nelem];
                vec = { type() };

            }
            void print() {
                int i = 0;
                for (i; i < nelem; i++)
                    cout << vec[i] << "n";
            }

            int size() { return nelem; }
        };

解決

真に訊きたい質問が何か微妙にわかりませんが

テンプレート仮引数に <int N> のようなものを書いたとして、それだけで配列がとられることはありません。提示クラス前者は type vec[N]; なるメンバをきっちり作っているから「配列メンバがある」、後者は type *vec; しかないから「配列」はなくてポインタメンバがあるだけです。

オイラのサンプル c++ constexpr型指定子の使い方とconstとの使い分けの方法 でも <int n> なテンプレート仮引数を取っていますけど、配列なんぞありません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *