[c++] Biblioteka czy da się iterować strukturę po składnikach??
Ostatnio zmodyfikowano 2015-09-12 11:27
mateczek Temat założony przez niniejszego użytkownika |
[c++] Biblioteka czy da się iterować strukturę po składnikach?? » 2015-09-09 21:14:55 Chciałem napisać bibliotekę do obsługi PLC. struct plcDane { WORD licznik bit_1: 1 bit_F: 1 std::BitSet < 16 > bity; DWORD czas }; int main() { plcDane BlokDanychWSterowniku; bibliteka plcInterfejs; plcInterfejs.readDaneFromPLC( & BlokDanychWSterowniku ) }
Wymarzyłem sobie taki mechanizm. Aby strukturę zadeklarować na zewnątrz klasy biblioteki a biblioteka mi ją w wątku regularnie czytała. Problem w tym, że taka struktura będzie różna w zależność od projektu do którego bym chciał wizualizację napisać. Innymi słowy czy da się iterować strukturę po elementach rozpoznając typ składników ?? Typy danych które mnie interesują to: BYTE WORD DWORD i coś dla bitów np: std::BitSet<16>bity; |
|
pekfos |
» 2015-09-09 22:04:34 Nie. |
|
mateczek Temat założony przez niniejszego użytkownika |
może nie idealnie ale lepszy rydz niż nic!!! » 2015-09-12 11:27:26 Jakieś rozwiązanie znalazłem na początek klasę do operacji na bitach #ifndef PLCBITSARRAY_H #define PLCBITSARRAY_H typedef unsigned short WORD;
class plcBitsArray { WORD data; public: plcBitsArray( int a = 0 ) { data = a; } void fromNumer( int numer ) { data = numer; } bool operator []( int bitNumer ) { return data & 1 << bitNumer; } }; Q_DECLARE_METATYPE( plcBitsArray ); #endif
I funkcja main do testowania. Typ Qt QVariant potrafi zwrócić info na temat przechowywanej zmiennej Więc biblioteka sama się zorientuje jakiego typu zmiennej ma oczekiwać. Sama inicjalizacja konternera QList<QVariant> może nie jest przejrzysta ale innego pomysłu nie mam #include "plcBitsArray.h" #include <QDebug> #include<QVariant>
int main() { QVariantList DB = { QVariant::fromValue( plcBitsArray( 0 ) ), QVariant::fromValue( WORD( 0 ) ) , QVariant::fromValue( int( 0 ) ) }; foreach( const QVariant zm, DB ) { qDebug() << zm.typeName(); } }
wynik po przeglądnięciu kontenera pętlą foreach plcBitsArray ushort int
|
|
« 1 » |