Utilizzo di T [1] anziché di T per funzioni sovraccariche per T (&) [N]

3

La funzione asio :: buffer ha (void*, size_t) e (PodType(&)[N]) overload.
Non volevo scrivere il brutto codice di tipo C (&x, sizeof(x)) , quindi ho scritto questo:

SomePacket packet[1]; // SomePacket is POD
read(socket, asio::buffer(packet));
foo = packet->foo;

Ma quel packet-> sembra un po 'strano - il packet è un array dopo tutto.
(E packet[0]. non ha un aspetto migliore.)

Ora, penso che sia una buona idea scrivere un codice del genere. Forse dovrei attenermi al codice di stile C non sicuro con void* e sizeof ?

Aggiornamento: ecco un altro esempio, per scrivere un pacchetto:

SomePacket packet[1]; // SomePacket is POD
packet->id = SomePacket::ID;
packet->foo = foo;
write(socket, asio::buffer(packet));
    
posta Abyx 26.09.2012 - 21:30
fonte

1 risposta

3

Se fossi in te, creerei una funzione:

template< typename PodType >
whatever buffer(PodType& obj) { return buffer(&obj, sizeof(obj)) }

Ma questa è un'omissione così ovvia in l'insieme di sovraccarichi forniti , che mi chiedo se mi manchi qualcosa.

    
risposta data 26.09.2012 - 21:48
fonte

Leggi altre domande sui tag