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
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
, ör. 't3B_data t3b; 'std :: vector r;' –
user3159253
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