Şablonlu bir sınıf tanımlamak için üç farklı dosyayı düşünürüm. Bildiri, bir .h
dosyasında, yöntemlerin bir .cpp
dosyasında yer alması ve açık örneklerin bir .inc
dosyasına eklenmesi (.cpp'nin sonuna bir satır ekleyerek, örneğin: #include "bar-impl.inc"
).Şablon türlerini şablon olmayan parametreli yöntemlerden döndürme
Şimdi, işte benim sorunum. İki şablon sınıfım var: Foo<S>
ve Bar<T>
. Bar<T>
sınıfın, bir şablon Tipi FooType*
döndüren bir yöntem (benim açık örneklemi olan ben, örneğin olmasını istiyorum, hangi Foo<float>*
)
template<class T>
class Bar{
....
template <class FooType>
FooType* doSomething(int);
....
};
ettik İçinde derleyici ne bilmiyor yana FooType*
, bar-impl.inc
dosyasında doSomething
yöntemini açık bir şekilde başlatmaya çalıştım.
//bar-impl.inc
template class Foo<float> * Bar<float>::doSomething(int);
Ancak, işe yaramadı ve ben bir hata alıyorum: no matching function for call to ‘Bar<float>::doSomething(int&)’ make: *** [main] Error 1
herkes bunu yapmak mümkün olup olmadığını bilir mi?
Teşekkürler! ama beyanı şablon sınıfının örneğinden ayırdığımdan, açık bir örneği yapmak için her halükarda ihtiyacım var, değil mi? – Javier
@Javier Şablon kodunuzu '.cpp' dosyalarının içine koyarsanız, derleyicinin bunu sizin için yapamayacağından, tüm şablonları açıkça başlatmanız gerekir. Ama sahip olduğunuz problem ilgisiz. Şablonlu bir yönteminiz var ve şablon olmayan bir yöntemi çağırıyorsunuz (ki bu mevcut değil). Tamam –
, bu yüzden, ben sahip olmalıdır: şablon sınıf Bar { .... şablon Foo * doSomething (int); .... }; önerdiğin şey bu mu? Ya da her zaman Foo * 'u iade etmeyi istemem. Üzgünüm, biraz kafam karıştı. DoSomething yöntemini nasıl arayacağımı anlatan bir "main.cpp" örneğini dahil etmeyi düşünüyor musunuz? –
Javier