16

I can define a specialized function in a cpp like so...

// header

template<typename T>
void func(T){}

template<>
void func<int>(int);

// cpp

template<>
void func<int>(int)
{}

How can I define a method in a specialized class in a cpp? Like so (which doesn't work, I get error C2910: 'A<int>::func' : cannot be explicitly specialized)...

// header

template<typename T>
struct A
{
    static void func(T){}
};

template<>
struct A<int>
{
    static void func(int);
};

// cpp

template<>
void A<int>::func(int)
{}
Olaf Dietsche
  • 72,253
  • 8
  • 102
  • 198
David
  • 27,652
  • 18
  • 89
  • 138
  • Did you check out this: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen Oct 23 '12 at 16:18
  • @Pukku That concerns specialization of a method in a non-templated class, which is actually the same as specialization of a standalone function (as in my working example above). I'm asking about defining a method in a specialized _class_ in a cpp. – David Oct 23 '12 at 16:21

1 Answers1

8

Use following syntax in your .cpp file:

void A<int>::func(int)
{
}

This is Visual C++ kinda feature.

See MSDN C2910 error description for details:

This error will also be generated as a result of compiler conformance work that was done in Visual Studio .NET 2003:. For code will be valid in the Visual Studio .NET 2003 and Visual Studio .NET versions of Visual C++, remove template <>.

Rost
  • 8,779
  • 28
  • 50
  • 3
    This is a compiler dependent feature of Visual Studio. See question http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-the-declaration-of-a-template-class-be-in-the and http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file – 8bitwide Oct 23 '12 at 16:55