Templates

Specialization of Member Functions

MSVC++ 2003 versus GCC.

edit2: nun tut es auch mit GCC4, dort ist das zusätzliche innere Template tödlich, da ja eigentlich der äußere Typ referenziert wird.
Todo: testen, ob MSVC auch die GCC-Variante annimmt.

#include < stdio.h >

namespace A
{
	template < typename T >
	class L
	{
	protected:
		T m_value;

	public:
		L()
		{
			init(m_value);
		}
		
#if (WIN32 && !CYGWIN)
		template 
		void init(T2)
#else
		// Kein Extratemplate nötig!
		void init(T)
#endif
		{
			printf("Set, kein unterstützter Typn");
		}

#if (WIN32 && !CYGWIN)
		// Nur VisualC++ 2003
		
		template <>
		void init(int)
		{
			printf("Set int");
			m_value = 32;
		}
		template <>
		void init(char*)
		{
			printf("Set char*");
			m_value = "Hallo";
		}
#endif

	};

#if (!WIN32 || CYGWIN)
	// Für GCC3

	template <>
	void L< int >::init(int)
	{
		printf("Set int");
		
		m_value = 32;
	}
	template <>
	void L< char* >::init(char*)
	{
		printf("Set char*");
		
		m_value = "Hallo";
	}
#endif
}