søppel Skrevet 17. mai 2004 Del Skrevet 17. mai 2004 (endret) GCC 3.4 (linux) Edit: Fannt løsning selv - og rettet opp koden under. #include <iostream> #define M_typelist1(T1) ::Oxymora::Typelist::Typelist<T1, ::Oxymora::NullT> #define M_typelist2(T1, T2) ::Oxymora::Typelist::Typelist<T1, M_typelist1(T2) > #define M_typelist3(T1, T2, T3) ::Oxymora::Typelist::Typelist<T1, M_typelist2(T2, T3) > using namespace std; namespace Oxymora { /// Null type. class NullT {}; namespace Typelist { /// Typelist. template<typename T, typename U> struct Typelist { typedef T HEAD; typedef U TAIL; }; // struct Typelist /// typeAt /** Return type at INDEX in TLIST as inner type result. */ template<class TLIST, unsigned int INDEX> struct typeAt; template<typename HEAD, class TAIL> struct typeAt<Typelist<HEAD, TAIL>, 0> { typedef HEAD result; }; // struct typeAt template<typename HEAD, class TAIL, unsigned int I> struct typeAt<Typelist<HEAD, TAIL>, I> { typedef typename typeAt<TAIL, I - 1>::result result; }; // struct typeAt /// replace /** Replace T with U in TLIST, result is inner type result. */ template<class TLIST, typename T, typename U> struct replace; template<typename T, typename U> struct replace<NullT, T, U> { typedef NullT result; }; // struct replace template<typename T, class TAIL, typename U> struct replace<Typelist<T, TAIL>, T, U> { typedef Typelist<U, TAIL> result; }; // struct replace template<typename HEAD, class TAIL, typename T, typename U> struct replace<Typelist<HEAD, TAIL>, T, U> { typedef Typelist<HEAD, typename replace<TAIL, T, U>::result> result; }; // struct replace }; // namespace Typelist }; // namespace Oxymora int main() { typedef M_typelist3(char, double, int) T1; // Should replace int in T1 with char const* .. right? typedef Oxymora::Typelist::replace<T1, int, char const*>::result T2; Oxymora::Typelist::typeAt<T2, 2>::result cstr = "blah"; /* test.cpp:72: error: invalid conversion from `const char*' to `int' */ cout << cstr << endl; return(0); } // main() Trøtt i trynet og ser ikke feilen - noen som ser noe? Her er en versjon i farger: http://nostdal.net/paste/b932305ba685d5041...6ce2d88c2a.html (feilmeldnig er pastet som kommentar i koden) Endret 17. mai 2004 av søppel Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå