Templates in Ansi C



  • Hi,

    gibt es eine Möglichkeit, die Eigenschaft/Funktion von Templates, wie es sie in C++ gibt, in Ansi C nachzubilden?
    Bräuchte sowas dringend.

    Danke
    DeVito



  • void *



  • Metaprogrammierung mit void* 😕 😕



  • Redhead schrieb:

    Metaprogrammierung mit void* 😕 😕

    nee, void* war nur generizität (zusammen mit makros natürlich). metaprogrammierung macht man mit rekursiven inkludierungen und makros (man kriegt aber nicht alles hin, aber schon recht viel. primzahlenzählen zur compilezeit scheitert bei win98 gerne an den maximal 200 gleichzeitig offenen files).



  • volkard schrieb:

    Redhead schrieb:

    Metaprogrammierung mit void* 😕 😕

    nee, void* war nur generizität (zusammen mit makros natürlich). metaprogrammierung macht man mit rekursiven inkludierungen und makros (man kriegt aber nicht alles hin, aber schon recht viel. primzahlenzählen zur compilezeit scheitert bei win98 gerne an den maximal 200 gleichzeitig offenen files).

    Du probierst vielleicht nen sch**** 😃 😃 😃 😃 😃 😃 😃



  • SpongeBob schrieb:

    gibt es eine Möglichkeit, die Eigenschaft/Funktion von Templates, wie es sie in C++ gibt, in Ansi C nachzubilden?

    manchmal geht das mit makros. wenn du dein problem genauer beschreiben würdest, ließe sich hier vielleicht eine lösung finden.



  • hallo,

    ich habe per "typedef" eigene datentypen (strukturen) generiert.
    um darauf aufsetzende variablen zu füllen wollte ich diese per referenz an eine funktion übergeben und nicht für jeden typ eine eigene funktion implementieren.

    spongebob



  • SpongeBob schrieb:

    gibt es eine Möglichkeit, die Eigenschaft/Funktion von Templates, wie es sie in C++ gibt, in Ansi C nachzubilden?
    Bräuchte sowas dringend.

    Nimm einfach Praeprozessor-Makros.

    #define ARRAY_CLASS( T ) \
       struct __array_ ## T { \
          T*      buffer; \
          size_t  size; \
          size_t  use; \      
       }
    
    ARRAY_CLASS( array, int )  a;
    
    typedef ARRAY_CLASS( array, int )  IntArray;
    
    IntArray b;
    

    So nach dem Schema.

    Um Methoden einer Klasse zu simulieren, kann man auch Funktionszeiger in der jeweiligen Datenstruktur verwenden.



  • Spongebob schrieb:

    hallo,

    ich habe per "typedef" eigene datentypen (strukturen) generiert.
    um darauf aufsetzende variablen zu füllen wollte ich diese per referenz an eine funktion übergeben und nicht für jeden typ eine eigene funktion implementieren.

    spongebob

    #define DEFINE_TYPED_SWAP( T ) \
       void __typed_swap_ ## T ( T* arg1, T* arg2 ) { \
          T temp = *arg1; \
          *arg1 = *arg2; \
          *arg2 = temp; \
       }
    #define CALL_TYPED_SWAP( T, a, b ) __typed_swap_ ## T ( &(a), &(b) )
    
    DEFINE_TYPED_SWAP( int )
    DEFINE_TYPED_SWAP( double )
    
    void func( void ) {
       int a = 7;
       int b = 5;
       double x = 19.3;
       double y = 17.1;
       CALL_TYPED_SWAP( int, a, b );
       CALL_TYPED_SWAP( double, x, y );
    }
    

Anmelden zum Antworten