Domanda

Voglio scrivere una libreria usando la sintassi C ++/CX e usarla in altri progetti.

Come sapete, le vecchie strutture di dati semplici non possono avere alcun metodo o operatori, quindi abbiamo dovuto fare cose come scrivere metodi statici in un'altra classe per fornire comportamento.

Inoltre non possiamo scrivere codice come questo:

private:
    int _D;
public:
    property int& D { int& get() {return _D;}}

o passare questa proprietà a metodi come questo:

void SampleMethod(int& d);

Non so perché la libreria di runtime di Windows abbia queste restrizioni.

Come posso compilare estensioni di runtime C ++/CX e Windows in un file .lib? O come si prefiggi l'intero file di codice del progetto WRL in un altro progetto?

È stato utile?

Soluzione

WinRT è un ABI destinato all'uso incrociato - almeno C ++, C#, VB e JS. Per questo motivo, i costrutti che fornisce sono limitati a ciò che può essere rappresentato in quelle lingue in modo semplice, ad esempio, se torni per riferimento, come lo userebbe il codice C#?

Se vuoi scrivere una libreria statica in C ++ per il consumo solo da C ++, il mio consiglio sarebbe di evitare le estensioni linguistiche in modo possibile e tenerle solo per quei luoghi in cui devi passare gli oggetti Winrt in giro. Non c'è alcun vantaggio che deriverai in quello scenario dall'esercizio completo C ++/CX.

Altri suggerimenti

A differenza di C ++, in cui una "struttura" è fondamentalmente "una classe in cui tutti i membri sono pubblici", nel runtime di Windows, una "struttura" è un tipo di valore. Pertanto, non può avere metodi, inclusi gli accessori della proprietà (i tipi di valore non possono avere metodi).

Inoltre, poiché le strutture sono tipi di valore, vengono sempre passate per valore. Ciò significa che passare una struttura in un metodo richiede la copia del contenuto della struttura (un tipo di valore implica che ogni consumatore opera sulla propria copia del tipo di dati). Come conseguenza di ciò, le strutture dovrebbero avere dimensioni abbastanza piccole (pensa "sotto i 16 byte").

Se è necessario passare attorno a oggetti più grandi, utilizzare invece una classe: le classi vengono passate per riferimento e quindi possono contenere qualsiasi quantità di dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top