Typ bei Template Member-Funktion explizit angeben [Visual C++ 6]



  • Wie kann man denn beim Visual C++ 6 Compiler den Typ bei einer Template Member-Funktion explizit angeben? Auf allen anderen Compilern die ich getestet habe funktioniert das so:

    class Example
    {
    public:
    	template<class T> void foo()
    	{
    	}
    };
    
    int main()
    {
    	Example example;
    	example.foo<int>();
    }
    

    Auf dem Visual C++ 6 Compiler leider nicht. Oder ist das mit diesem Compiler unmöglich?



  • Eckard schrieb:

    Wie kann man denn beim Visual C++ 6 Compiler den Typ bei einer Template Member-Funktion explizit angeben?[...]
    Oder ist das mit diesem Compiler unmöglich?

    Das ist in der Tat nicht möglich. Ein möglicher Workaround:

    template <class T> struct Type2Type {};
    class Example
    {
    public:
        template<class T> void foo(Type2Type<T>)
        {
        }
    };
    
    int main()
    {
        Example example;
        example.foo(Type2Type<int>());
    }
    

    Da dies ziemlich hässlich ist, kann man zusätzlich noch eine non-member Wrapperfunktion schreiben:

    ...
    template <class T>
    void example_foo(Example& e, T* = 0)
    {
        e.foo(Type2Type<T>());
    }
    
    int main()
    {
        Example example;
        example_foo<int>(example);
    }
    

Anmelden zum Antworten