SORU
12 Kasım 2009, PERŞEMBE


Şablonu esas alan bir sınıftaki tek bir yöntemi şablon uzmanlaşma

Aşağıdaki başlık şablonu esas alan benim sınıf içeren, en az .CPP iki dosya dahil olduğu her zaman göz önüne alındığında, bu kodu doğru derler:

template <class T>
class TClass 
{
public:
 void doSomething(std::vector<T> * v);
};

template <class T>
void TClass<T>::doSomething(std::vector<T> * v) {
 // Do somtehing with a vector of a generic T
}

template <>
inline void TClass<int>::doSomething(std::vector<int> * v) {
 // Do somtehing with a vector of int's
}

Ama ihtisas yöntemi iç not. Kodu linker hata LNK2005 içinde VS2008 () yöntemi daha sonra bir kez tanımlanmış olması nedeniyle, kendisi için gereklidir. AFAIK tam bir şablonu uzmanlaşma basit bir yöntem tanımı ile aynıdır çünkü bu anlıyorum.

Nasıl inline o kaldırırım? Kodu her kullanımda ilişkiyi ele alalım. Google aranan bazı sorular işte bu YÜZDEN okumak ve önerilen çözümler çoğunu denedim ama hiçbiri başarılı bir şekilde yapılmış (en azından VS 2008).

Teşekkürler!

CEVAP
12 Kasım 2009, PERŞEMBE


Basit işlevleri ile bildirim uygulaması kullanabilirsiniz. Senin başlığında bildirim koymak:

template <>
void TClass<int>::doSomething(std::vector<int> * v);

ve cpp-dosya: bir uygulama içine koymak

template <>
void TClass<int>::doSomething(std::vector<int> * v) {
 // Do somtehing with a vector of int's
}

Satır içi (unuttum ve bu çözüm:) olmaz sanıyordum) kaldırmak için unutma. VC 2005 üzerinde kontrol etti

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Attempts at least

    Attempts at

    1 Ocak 2007
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • tseyina

    tseyina

    2 AĞUSTOS 2006