1

ネイティブ配列を作成し、マネージド コードにアクセスしたいと考えています。intコードを異なる型 ( 、longfloat、 )に書き直したくないdoubleため、ジェネリックを使用してみました。

typedef int IND;

generic <typename T>
public ref class ntvarray
{
    void *pnt;
    IND sz;

public:
    ntvarray(IND length)
    {
        sz = sizeof(T);
        pnt =  ::operator new(length*sz);
    }

    ~ntvarray()
    {
        ::operator delete(pnt);
    }

    void* pointer()
    {
        return pnt;
    }

    T getitem (IND index)
    {
        //c3229
        return ((T*)pnt)[index];
    }

    void setitem (IND index, T value)
    {
        //c3229
        ((T*)pnt)[index] = value;
    }
};

エラーが発生し、このエラーの理由を知っています。

エラー C3229: 'T *': ジェネリック型パラメーターの間接指定は許可されていません

ただし、ジェネリックを使用してこれを行う方法はありますか? これを行う他の方法は、ジェネリックを使用する以外の方法でしょうか?

4

1 に答える 1

0

いいえ、ジェネリックを使用してこれを行うことはできません。ただし、テンプレートを使用することはできます。これにより、質問が強調するコードの重複が回避されますが、ジェネリックのように実行時のインスタンス化は許可されません。

于 2011-07-01T15:52:01.860 に答える