2016-04-02 19 views
-2

Bu sorunun kökeni, şablon konseptinin kendisinin çok derinden anlaşılmamasından kaynaklanıyorsa gerçekten üzgünüm.Neden C++ 'da kullanmak için şablon sınıfım konusunda uzmanlaşmam gerekiyor?

Aşağıdaki sınıfı tanımlamıştım.

: basit bir şablon testi yapabilmek için

#include <iostream> 

template <typename T> 
class T3B_data{ 
public: 
    T3B_data<T>(); 
    ~T3B_data<T>(); 
    void fromText(std::istream& is); 
    void fromText(const std::string& textPath); 
    void fromBinary(std::istream& is); 
    std::ostream & toText(std::ostream& oStream)const; 
    std::ostream & toBinary(std::ostream& oStream); 
    friend inline std::ostream& operator << (std::ostream & oStream,const T3B_data<T> & data){ 
     return data.toText(oStream); 
    } 
private: 
    T * mObj; 
}; 

i ekleyerek şablonunu açıkça instanciate zorunda neden olsun o

#include "T3B_data.h" 

int main(void){ 
    T3B_data<int> * myData = new T3B_data<int>(); 
    return 0; 
} 

i don t örneğini amacıyla ana aşağıdaki çalıştı Sınıf kurucusunu bulmak için derleyici dosyasının üstbilgi dosyasının sonunda

.

Not:

çizgiyi ekleme aslında yepyeni sınıf nesil zorlamak olduğunu tam olarak farkında değilim. Sadece ana koddaki kodun aslında derleyici düzeyinde şablon instanciasyonu zorlamadığını anlamıyorum.

struct myStruct{ 
    int a; 
    std::string; 
}; 
std::vector<myStruct> a; 

:

Not 2: STL kapları kullanırken ben gibi kendinden tanımlı türüyle her kullandığınızda bunu instanciate gerekmez çünkü

Ben yanlış bir şey yapmak oldukça emin im m Bu soruya ilgilerini paylaşan herkese şimdiden teşekkür ederiz.

DÜZENLEME: benim ana içine benim başlık dosyasını taşımak ve beyanname sonunda {} kullanarak uygulanmasını stubbed olarak

şey, benim uygulanmasında tamamen yanlış olmalı. ve her şey T3B_data şablon sınıfı olmadan iyi derler; beyanı. Eğer bir template sınıf için bir uygulama dosyası ve başlık dosyası kullanıyorsanız separating constructor implementation with template from header file

+0

Karışıklıklarınızın nedeni tam olarak belli değil. Tempate sınıfınız, STL'den alınan şablonlarla tamamen aynı şekilde kullanılabilir. – user3159253

+0

, ör. 't3B_data t3b; 'std :: vector r;' – user3159253

+0

ile yaptığınız gibi ve tam tersi değişkenler yaratabilirsiniz: belirli durumlarda, bir STL şablonu veya kullanıcı tanımlı olup olmadığına dair açık şablon parametresi uzmanlığı gereklidir. Yeni tahsis, bu – user3159253

cevap

0

için yinelendiği biten

Soru ardından derleyici bellek rezervasyon nedenlerle bu nedenle için sınıf ile kullanılacak herhangi türlerini bilmesi gerekir Programda başka bir yerde sınıf için bir şablon argümanı olarak int tipi kullanıyorsanız, template class T3B_data<int> (yaptığınız gibi) açıkça bildirmeniz gerekir.

Bunu yapmaktan kaçınmak için, ayrı bir uygulama dosyası kullanmak yerine başlık dosyasındaki şablon sınıfının tüm yöntemlerini tanımlayabilir ve uygulayabilirsiniz (satırlar açısından gereksinimlerinize ve şablon sınıfının boyutuna bağlı olarak tercih edilebilir) kod).

İlgili konular