Pomeriggio tutto,C#: utilizzo di un generico per creare un vettore di puntatori
un piccolo aiuto se si desidera. Per aggirare il limite di oggetti 2Gb in .NET ho creato una classe che alloca memoria sull'heap e questo mi permette di creare array fino al limite della mia RAM libera. Tuttavia, per facilità di sviluppo (come era una dimostrazione di concetto) era difficile da codificare per i lunghi. Ora che funziona ho cercato di alterare il codice per utilizzare i generici in modo da poter utilizzare lo stesso codice per più tipi.
Nell'allocazione della memoria e dell'indice corretto dell'array ho bisogno di un array di puntatori dello stesso tipo che la matrice manterrà, vale a dire un array lungo ha bisogno di long*[] myLargeArray
. Il problema è che quando uso farmaci generici questa dichiarazione diventa T*[] myLargeArray
, che produce sempre l'errore 'Non può prendere l'indirizzo, ottenere la dimensione di, o dichiarare un puntatore a un tipo gestito (' T ')'
Grazie in anticipo.
PS Prima che qualcuno chieda, sì, ho davvero bisogno di array così grandi.
codice di esempio per una matrice 2D:
LargeArray <int> myArray = new LargeArray<int>(x, y);
public unsafe class LargeArray where T : struct
{
...
private T*[] tArr;
...
public LargeArray(long sizeI, long sizeJ)
{
...
myLargeArray = new T*[sizeI];
...
}
}
Penso che il modello di fabbrica sia decisamente il modo di andare qui. –