4

いくつかの Ogre コードを C# バージョンに変換しようとしていますが、問題が発生しました。

    const size_t nVertices = 8;
    const size_t vbufCount = 3*2*nVertices;

    float vertices[vbufCount] = {
            -100.0,100.0,-100.0,        //0 position
            -sqrt13,sqrt13,-sqrt13,     //0 normal
            //... 
           -sqrt13,-sqrt13,sqrt13,     //7 normal
    };

基本的に、const size_t は C# には存在せず、const int を使用して配列のサイズを宣言することはできません。

定数値で配列を宣言する方法を知りたいと思っていましたか?

4

5 に答える 5

4

size_t は、基本的に別の型のエイリアスである typedef (#define マクロのようなもの) です。その定義は SDK によって異なりますが、通常はunsigned intです。

いずれにせよ、この場合、それらは定数であるため、実際には問題ではありません。したがって、nVertices は 8 で、vbufCount は 48 であることがわかります。C# では、次のように記述できます。

const int nVertices = 8;
const int vbufCount = 3 * 2 * nVertices;

float[] vertices = new float[vbufCount] {
    -100.0,100.0,-100.0,        //0 position
    -sqrt13,sqrt13,-sqrt13,     //0 normal
    //... 
    -sqrt13,-sqrt13,sqrt13,     //7 normal
    };
于 2013-02-09T13:23:06.167 に答える
2

基本的に、const size_t は C# には存在せず、const int を使用して配列のサイズを宣言することはできません。

これはが原因でconst intはなく、配列サイズが C# の配列型の一部ではないためです。コードを次のように変更できます。

float[] vertices = {
        -100.0f,100.0f,-100.0f,     //0 position
        -sqrt13,sqrt13,-sqrt13,     //0 normal
        //... 
       -sqrt13,-sqrt13,sqrt13,      //7 normal
};

同じことを行うには、他にもいくつかの方法があります。

const int nVertices = 8;
const int vbufCount = 3*2*nVertices;

float[] vertices = new float[vbufCount] {
        -100.0f,100.0f,-100.0f,     //0 position
        -sqrt13,sqrt13,-sqrt13,     //0 normal
        //... 
       -sqrt13,-sqrt13,sqrt13,      //7 normal
};

唯一の違いは、初期化子の項目数が指定した数と一致しない場合、コンパイル時にエラーが発生することです。

于 2013-02-09T13:27:52.720 に答える
1
float[] array = new float[] { 1.2F, 2.3F, 3.4F, 4.5F };

arraysこれは、C#で宣言する方法です

于 2013-02-09T13:13:47.853 に答える
1

これらのすべての回答は、どのタイプが size_t と同等であるかという質問に実際には答えていません。.NET の size_t に相当する正しい型は UIntPtr です。32 ビット プラットフォームでは 32 ビット、64 ビット プラットフォームでは 64 ビットであり、署名されていません。真に等価な唯一の型です。

于 2015-10-02T12:13:34.087 に答える
1

C++ では、size_t は、CPU のネイティブ整数型に従う、少なくとも 16 ビットの符号なし整数型です。つまり、ほとんどの人が「unsigned int」として使用しているにもかかわらず、sizeof(size_t) は固定されていません。C# では、そのようなことはありません。

C# のサイズ (配列とリストを使用する場合など) は通常、32 ビット整数である「int」型です。

あなたの場合、おそらく配列を読み取り専用にして、「vertices.Length」を使用します。

    private readonly float[] vertices = new float[]
    {
        1f,2f,3f,4f,5.2f // etc
    };

またはこの場合、おそらく 2D 配列として定義し、vertices.GetLength を使用します。

    private readonly float[,] vertices = new float[5,5];

    // fill in code:
    vertices[0, 0] = 0; 
    // etc
于 2013-02-09T14:21:55.380 に答える