(BOOST): Compiler Template an Funktion übergeben

jkallup

Erfahrenes Mitglied
Habe folgenden Code:

Code:
class MyQVariant
{
public:
    MyQVariant() { }
    MyQVariant(MyQVariant *);
    MyQVariant(double);
    MyQVariant(QString&);

    MyQVariant& operator += (MyQVariant&);
    MyQVariant& operator -= (MyQVariant&);
    MyQVariant& operator *= (MyQVariant&);
    MyQVariant& operator /= (MyQVariant&);

    MyQVariant& operator += (double);
    MyQVariant& operator -= (double);
    MyQVariant& operator *= (double);
    MyQVariant& operator /= (double);

    MyQVariant& operator += (QString&);

    MyQVariant& operator = (double);
    MyQVariant& operator + (double);
    MyQVariant& operator - (double);
    MyQVariant& operator * (double);
    MyQVariant& operator / (double);

    MyQVariant& operator = (QString);
    MyQVariant& operator + (QString);

    MyQVariant& operator = (MyQVariant&);

public:
    int     value_type;

    double  value_double;
    QString value_string;
};

{
typedef boost::multi_array<MyQVariant, 2> ARRAY_ArrayB;
ARRAY_ArrayB ARRAYTYPE_ArrayB(boost::extents[4][8]);

ARRAYTYPE_ArrayA[0][0] = 2.000000;

print_console(ARRAYTYPE_ArrayA);
}

void print_console(boost::multi_array A)
{
// fehler:
MyDebugFuncs.cc:47:27: Fehler: Variable oder Feld »print_console« als »void« deklariert
MyDebugFuncs.cc:47:39: Fehler: missing template arguments before »A«

}

ist es irgendwie möglich, einen dynamischen multi_array an eine funktion zu übergebeb zbd dessen Inhalt (MyQVariant) anzeigen zu lassen bzw. werte ändern zu können?
Wenn ja, wie?
Danke für Hilfe
 
hallo,

ich habe nun folgenden code.
wie bekomme ich den "paule" in die makierte zeile?"
oder: wie setze ich ein Array zusammen?
Danke für Hilfe

Code:
class MyQVariant
{
public:
    MyQVariant() { }
    MyQVariant(MyQVariant *);
    MyQVariant(double);
    MyQVariant(QString&);
    MyQVariant(const int&);
    template<unsigned int N> MyQVariant(const boost::multi_array<MyQVariant, N> &);

    MyQVariant& operator += (MyQVariant&);
    MyQVariant& operator -= (MyQVariant&);
    MyQVariant& operator *= (MyQVariant&);
    MyQVariant& operator /= (MyQVariant&);

    MyQVariant& operator += (double);
    MyQVariant& operator -= (double);
    MyQVariant& operator *= (double);
    MyQVariant& operator /= (double);

    MyQVariant& operator += (QString&);

    MyQVariant& operator = (double);
    MyQVariant& operator + (double);
    MyQVariant& operator - (double);
    MyQVariant& operator * (double);
    MyQVariant& operator / (double);

    MyQVariant& operator = (QString);
    MyQVariant& operator + (QString);

    MyQVariant& operator = (MyQVariant&);

public:
    int     value_type;

    double  value_double;
    QString value_string;
};

#ifdef __MAIN_RUN__
template <typename Array>
void print(const Array& A)
{
    typename Array::const_iterator i;
    QString s;
    char buffer[2048];

    s = QString("[");
    for (i = A.begin(); i < A.end(); ++i)
    {
        if (boost::next(i) != A.end())
        {
            s = s + QString(static_cast<MyQVariant>(A).value_string);  // leer
            s = s + QString(",");
        }
    }

    s = s + QString("]");
    print_console(QString(s));
}

template<unsigned int N> MyQVariant::MyQVariant(const boost::multi_array<MyQVariant, N> &A)
{
    static_cast<MyQVariant>(A[0][0]).value_string = QString("paule");  // hier
}




    typedef boost::multi_array<MyQVariant, 2> ARRAY_ArrayA;
    ARRAY_ArrayA ARRAYTYPE_ArrayA(boost::extents[4][8]);

    typedef boost::multi_array<MyQVariant, 2> ARRAY_ArrayB;
    ARRAY_ArrayB ARRAYTYPE_ArrayB(boost::extents[4][8]);

    ARRAYTYPE_ArrayA[0][0] = 2.000000;
    ARRAYTYPE_ArrayA[1][0] = ARRAYTYPE_ArrayA[0][0];
    ARRAYTYPE_ArrayB[0][0] = QString("Alfonso");


    print_console(QString("Hallo Welt!"));
    print_console(ARRAYTYPE_ArrayA[0][0]);
    print(ARRAYTYPE_ArrayB);
 
Du mischt anscheinend die Qt und boost Bibliotheken, woven ich dir abraten möchte.

Bei der folgenden Funktion verwendest du unsigned int als template type, ich kenne templates nur mit typedef oder class.
Code:
template<unsigned int N> MyQVariant::MyQVariant(const boost::multi_array<MyQVariant, N> &A)
{
    static_cast<MyQVariant>(A[0][0]).value_string = QString("paule");  // wo wird sicher gestellt dass N=2 ist?
}
Desweiteren solltest du mit dem hin und her casten vorsichtigt sein.

Was genau hast du vor?
Vielleicht reicht in deinem Fall auch einfach ein 2D QVector?
Code:
QVector<QVector<QString>> matrix;
 
Zurück