Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Biblioteka czy da się iterować strukturę po składnikach??

Ostatnio zmodyfikowano 2015-09-12 11:27
Autor Wiadomość
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.

C/C++
struct plcDane {
    WORD licznik
    bit_1: 1
    //[....]
    bit_F: 1 //pola bitowe
    //lub zamiast pól bitowych;
    std::BitSet < 16 > bity;
    DWORD czas
};
int main() {
    plcDane BlokDanychWSterowniku;
    bibliteka plcInterfejs; //biblioteka
    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;
P-137385
pekfos
» 2015-09-09 22:04:34
Nie.
P-137388
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

C/C++
#ifndef PLCBITSARRAY_H
#define PLCBITSARRAY_H
typedef unsigned short WORD; //Word nie jest standardowym typem C++

//definiujemy klasę tablicaBitowa
class plcBitsArray
{
    WORD data; //składnik klasy
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 // PLCBITSARRAY_H

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

C/C++
#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
P-137435
« 1 »
  Strona 1 z 1