Fixed Size Array Assignment mit Rückgabewert einer Funktion



  • Gegeben sei eine Funktion foo:

    template<int x, int y, typename t>
    T (*foo())[x][y];
    

    Ich würde gerne ein static Assignment machen in der Form:

    static T bar[4][4]
    {
        *foo<4, 4, T>()
    };
    

    Leider frisst der Compiler das nicht. Was mache ich falsch?

    Aus technischen Gründen muss ich fast mit Arrays arbeiten hier.



  • Hallo,

    mit deiner Syntax bringst du hier jeden um. Warum benutzt du keine Typedefs, das ist hunderttausend mal angenehmer zu lesen als diese Naturkatastrophe.

    Dass Arrays nicht einfach so mit dem Zuweisungsoperator kopierbar sind, sollte klar sein. D.h. du willst das Array entweder auf das Original referenzieren oder du benutzt ne Kopierfunktion wie std::copy() oder ::memcpy().

    Ich hab dein Beispiel mal eben lauffähig gemacht:

    template<typename T, int A, int B>
    using array_type = T[A][B];
    
    template<typename T, int A, int B>
    array_type<T, A, B>& foo(){
        static array_type<T,A,B> xx = {};
        return xx;
    }
    
    static array_type<int,1,1>& x = foo<int,1,1>();
    

Log in to reply