Wie kann ich diesen fehler umgehen?



  • ok, ich hab mir das buch "modernes C++ design" angeschafft, und finde den Inhalt einfach genial.Nun wollte ich mal etwas von dem Code ausprobieren, und hab diese klasse genommen:

    template<class T,class U>
    class Conversion{
            typedef char small;
            class big{ char dummy[2];};
            static small Test(U);
            static big Test(...);
            static T makeT();
        public:
            enum{exists=sizeof(Test(makeT()))==sizeof(small) };
    };
    

    eigentlich soll der code simpel fesstellen, ob man einen typ in einen andren casten kann(zb wenn man in einer klasse als template parameter nur klassen haben will, die von einer bestimmten klasse abgeleitet sind.

    nunja ich bekomm diesen fehler:
    [C++ Error] Unit1.cpp(11): E2514 Cannot (yet) use member overload resolution during template instantiation

    wie kann ich den umgehen?
    bzw, wie kann ich es schöner umgehen, als so:

    template<class T,class U>
    class ConversionHelper{
            protected:
            typedef char small;
            class big{ char dummy[2];};
            static small Test(U);
            static big Test(...);
            static T makeT();
    };
    template<class T,class U>
    class Conversion:public ConversionHelper<T,U>{
        public:
            enum{exists=sizeof(Test(makeT()))==sizeof(small) };
    };
    


  • Hallo,
    schau dir am Besten mal boost::traits oder eine andere Boost-Lib an. Da findest du in der Regel gute Workarounds für viele Compiler.


Anmelden zum Antworten