8

これが私のクラスの例です:

template<typename T> class MyClassVector
{
    public:
        inline const std::vector<T>& data() const
        {
            return _data;
        }

    protected:
        std::vector<T> _data;
};

template<typename T, unsigned int SIZE> class MyClassArray
{
    public:
        inline const /* SOMETHING */ data() const
        {
            return _data; // OR SOMETHING ELSE
        }

    protected:
        T _data[SIZE];
};

私の質問は次のとおりです: MyClassArray クラスの MyClassVector data() 関数と同等のものは、基になる _data コンテナーへの定数参照を返しますか?

どうもありがとうございました !

4

5 に答える 5

13

これを行うには 2 つの方法があります: 直接的な方法と読み取り可能な方法:

直接:

inline T const (& data() const)[SIZE] {
  return _data;
}

読み取り可能:

typedef T Data[Size];
inline Data const& data() const {
  return _data;
}
于 2012-08-08T04:07:10.987 に答える
0

constTのサイズ指定された配列への参照を返すことができSIZEます。これの構文はわかりませんが、型特性を使用して生成できます。しかし、より適切なのは、単に複製が不十分std::array<T, N>であり、Boost/TR1 にも見られるため、少し時間の無駄です。

#include <type_traits>

class X {
    int arr[5];
    std::add_reference<std::add_const<int[5]>::type>::type foo() {
        return arr;
    }
};

これにより、配列へのサイズ対応の const 参照が返されます。

于 2012-08-08T03:08:43.133 に答える
0

T の const インスタンスへのポインターとして配列を公開しないのはなぜですか? また、配列のサイズは?

template<typename T, std::size_t SIZE>
class MyClassArray {
public:
    inline const int* data() const
    {
        return _data;
    }

    inline std::size_t size() const
    {
        return SIZE;
    }

protected:
    std::size_t _data[SIZE];
};

類似のアプローチがあります。std::stringクラスc_str()size()メンバー関数を参照してください。

于 2012-08-08T06:06:18.743 に答える