Ne kadar ileri bir şablon sınıf ilan etmek?
#ifndef __TEST__
#define __TEST__
namespace std
{
template<typename T>
class list;
}
template<typename T>
void Pop(std::list<T> * l)
{
while(!l->empty())
l->pop();
}
#endif
ve benim ana fonksiyonu kullanılır. Hataları aldım. Tabii ki, std::list
için daha fazla şablon parametreler (sanırım ayırıcısı) olduğunu biliyorum. Ama, bu başka bir konu. İleriye ilan edebilmek için şablon bir sınıf dolusu şablon bildirimi bilmek zorunda mıyım?
EDİT: önce bir işaretçi kullanarak değildim - bir referans oldu. İşaretçi ile halletmeye çalışacağım.
CEVAP
Sorun ileri-ilan bir şablon sınıfı değil. Evet, tüm şablon parametreleri bilmek gerekiyorve değerlerineileriye doğru beyan edebilmek için:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
Ama namespace std
bile böyle bir ileri bir açıklama yapmak açıkça standart tarafından yasaklanmıştır:sadecestd
koymak için iznin şey bir şablonduruzmanlıkgenellikle kullanıcı tanımlı bir tür std::less
. Başkasının gerekirse ilgili metin alıntı yapabilirsiniz.
Sadece #include <list>
ve bunun için endişelenme.
Oh, bu arada, herhangi bir ad çift alt çizgi içeren __TEST__
yerine TEST_H
gibi bir şey kullanmak gerekir bu yüzden uygulama tarafından kullanılmak üzere ayrılmış. Bir uyarı veya bir hata olmayacak, ama eğer program uygulama tanımlı bir tanıtıcı ile bir çatışma varsa, ya da düzgün çalıştırmak için garanti değilkötü kurdu. Ayrıca yasaktır adları ile başlayarak büyük harfle, diğerleri arasında, ve ardından alt çizgi. Genel olarak, ne ile uğraştığını bilmeden alt çizgi ile işlerin başlama.
Neden'ileri-ilan böyle bir ad ala...
Ne kadar zarif bir sayı aralığı içinde...
İleri-ilan Python bir işlevi olması mü...
C ileri bir ilan numaralama ...
Nasıl bir arkadaş derlemesi ilan etmek...