2009-04-20 14 views
3

C#でそのC++テンプレート関数の宣言をやり直すには?C#Generics - array?

template <class type> 
void ReadArray(type * array, unsigned short count) 
{ 
    int s = sizeof(type) * count; 
    if(index + s > size) 
     throw(std::exception("Error 102")); 
    memcpy(array, stream + index, s); 
    index += s; 
} 

と呼ばれる場合、それは特定の位置(インデックス)でストリーム(ストリーム)を読み取ることにより、所与のアレイ内のバイト/ワード/(タイプ)を追加します。

私はこのような宣言をやり直すことを試みたが、私はエラーに

public static T void ReadArray(<T> Array inputarray) // error 
    { 
     ... 
    } 

感謝を入手!

他の控えめな質問 - どのようにバイトをその配列(memcpy())に追加するのですか?ポインタを使うべきですか?あなたはこのようにそれを使用するリストに

List<T> list = new List<T>(); 
list.AddRange(inputarray); 
list.AddRange(anotherArray); 

答えて

14

それをひそかすべき配列に追加する

2
public static void ReadArray<T>(T[] inputarray) 
    { 
     ... 
    } 

public static void ReadArray<T>(T[] inputArray) { 
    ... 
} 

あなたはアレイ間でデータをコピーするArray.Copyメソッドを使用することができます。

編集:
異なるデータタイプ間でデータの「ブラインドコピー」を作成する場合は、次のようにします。バイト配列からロング配列への変換は、安全なコードを使用して行うことはできません。たとえば、BitConverterクラスを使用して、配列の8バイトをlongに変換できます。安全でないコードをポインターで使用して "ブラインドコピー"を行うこともできますが、実際に安全な方法を使用してパフォーマンスの問題に遭遇するまで、そのコードを保存する必要があります。

+0

T voidとは何ですか? –

+0

私は仲間を訂正してくれてありがとう、私はちょうどチェックせずにコピーして貼り付けた – oscarkuo

+0

私はコピーメソッドを理解していません。別の配列は何ですか?それはC++コードのストリームですか? –