2012-10-23 16 views
11

Ben ... Bunun gibi bir cpp'de bir uzman işlevi tanımlayabilirsinizŞablon uzmanlığını cpp olarak tanımlayın?

// başlık

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

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

// cpp Ben özel bir sınıfta bir yöntemi tanımlayabilirsiniz nasıl

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

bir cpp'de mi? böylece gibi ... (hangi çalışmıyor, ben error C2910: 'A<int>::func' : cannot be explicitly specialized olsun)

// başlık

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

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

// cpp

template<> 
void A<int>::func(int) 
{} 
+0

sen kontrol ettin bu: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen

+0

@Pukku Bu bir yöntemin endişeleri uzmanlaşmadaki aslında bir bağımsız fonksiyonun uzmanlaşması ile aynı olmayan bir tempolu sınıf (yukarıdaki çalışma örneğimde olduğu gibi). Bir cpp'de uzmanlaşmış bir _class_ içindeki bir yöntemi tanımlamayı istiyorum. – David

cevap

4

kullanın sizin .cpp dosyasında sözdizimi aşağıdaki gibidir:

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

Bu, Visual C++ türünde bir özelliktir.

Detaylar için MSDN C2910 error description bakınız:

Bu hata 2003, Visual Studio .NET yapıldı derleyici uygunluk çalışması sonucunda oluşturulur :. Kod için Visual Studio .NET 2003 ve Visual Studio .NET sürümleri Visual C++, şablon < kaldırma> geçerli olacaktır.

+3

Bu, Visual Studio'nun derleyiciye bağımlı bir özelliğidir. Http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-the-declaration-of-a-template-class-be-in-the ve http://stackoverflow.com/ adresine bakın. sorular/495021/neden-can-şablonları salt-uygulanacak-in-the-header-dosyasında – 8bitwide

İlgili konular