ne kurze frage zu templates



  • hmmm. ist das eigentlich ne "schwaeche" von C++ oder gibt es einen bestimmten grund warum man sowas vielleicht nicht machen koennen soll?

    momentan sehe ich keinen grund warum ich bei mehreren template-parametern nicht einzelne davon spezialisieren koennen soll!?

    wie auch immer, danke vorab.

    gruss.



  • c++ hat ne menge Schwächen, die sicher irgendwann ausgebügelt werden. Es ist nur so, das manche dinge die als Schwäche erscheinen in wirkleichkeit keine sind.



  • deshalb ja auch meine konkrete frage ob das im obigen fall eine "schwaeche" ist oder tiefergehende gruende existieren, die sowas verbieten.

    ein kleines beispiel warum ich sowas ueberhaupt versuche (vielleicht ist ja mein denkansatz falsch):

    man stelle sich eine klasse Graph vor:

    template<class NODEDATA, class EDGEDATA>
    class Graph
    {
      public:
        // ...
        // hier nun irgendwelche methoden mit denen man einen graphen erstellen,
        // manipulieren kann
        // ...
    
        // folgende methode soll default-werte fuer kanten-daten liefern
        static EDGEDATA default_edge_value();
    };
    
    template<class NODEDATA>
    string Graph<NODEDATA, string>::default_edge_value(){return "something";}
    
    template<class NODEDATA>
    string Graph<NODEDATA, int>::default_edge_value(){return -1;}
    
    int main(int argc, char *argv[])
    {
      Graph<string, string> g;
      Graph<int, string> g2;
    
      cout << Graph<string, string>::default_edge_value() << endl;
      cout << Graph<int, string>::default_edge_value() << endl;  
    
      return 0;
    }
    

    ich moechte nun, egal welchen typ ich fuer NODEDATA angebe, fuer den fall dass EDGEDATA ein string ist, "something" zurueckliefern.
    wieso werde ich nun gezwungen NODEDATA auch noch zu spezialisieren???

    vielleicht schiesse ich mir ja durch meine denkweise momentan selbst in den fuss, weiss es nicht.

    danke.



  • Ich glaube es würde nicht mal klappen wenn du komplett explizit spezialisierst...



  • kann mir vielleicht jemand sagen, ob er eine gute (schon getestete und wenns geht portable) Library fuer Matrizenberechnungen/Vektoralgebra fuer C++ kennt?

    (die blitz++ library habe ich mir schon angesehen, aber die soll fuer beispielsweise Visual C++ nicht funzen)

    danke, gruss.



  • Das die nicht funktioniert liegt nur an der nicht-standard-konformität der msvc. Beim msvc 7.1 funktioniert sie meines Weiisens... Wenn ich du wäre würde ich nie auf eine Bibliothek verzichten, nur weil sie auf einem Kompiler nicht funktioniert, weil der nicht standardkonform genug ist.
    /mal ganz davon abgesehen, warum setzt du nicht einfach die angebotene Lösung um?



  • ok das habe ich nicht genau genug gelesen, danke.

    mit libraries habe ich im allgemeinen nicht so tolle erfahrungen gemacht.
    man muss schon meinungen anderer einholen.
    Es gibt selbsternannte libraries zu hauf, aber ob die gut funktionieren ist ne andere sache.

    hat jemand erfahrungen mit der genannten lib?

    vielen dank.



  • Soweit ich wiß soll blitz++ ganz gut sein. Die Arithmetik von tinyvector basiert auf template-metaprogramming-> sauschnell. Und auch die normale matrizenklasse soll um längen schneller sein als std::valarray...
    achja: klappt unser Vorschlag oder bekommst du es nicht hin? (Um nicht nur off-topic zu posten 😃 )



  • ness schrieb:

    Und auch die normale matrizenklasse soll um längen schneller sein als std::valarray...

    Mag mitunter daran liegen, dass valarray keine Matrizenklasse ist 🙄 .

    blitz++ funktioniert unter vc++ 7.1. ansonsten kann man sich auch mal boost::ublas anschauen.



  • ja der vorschlag klappt 🙂
    hab ich doch gesagt oder??!!! danke nochmals.


Anmelden zum Antworten