2013-11-23 47 views
6

Bir şablon kurucu ile sınıf oluşturmak istiyorum:C++ standardı, şablon olmayan bir sınıf için şablon kurucusuna izin veriyor mu?

class foo 
{ 
    template <class T> foo(T var) {} 
}; 

Bu VS2008 derler, ama bir standart dışı uzantısı ise veya C++ standart izin veriyorsa hiçbir fikrim yok. [Temp.mem] 'de

+5

İzin var. – BoBTFish

+0

En azından düz C++ açısından, MS standardı dikkate aldım ve genellikle bazılarının yaptığı gibi uzantılar için kopmuyor. – ChiefTwoPencils

+4

Bu izin ve bazen oldukça kullanışlı geliyor. Derleme olmaması için bir sebep yok. Kurucu hala bir işlevdir ve bu nedenle şablona dayalı olabilir. Ancak, kurucular için bir kısıtlama vardır. * Açık * şablon parametreleriyle çağrılmazlar; argüman listesinden * çıkarılabilirler *. Yani 'template foo() {T bir şey; ...} 'çalışmaz. – WhozCraig

cevap

6

:

bir şablon, bir sınıf veya sınıf şablonu içinde beyan edilebilir; Böyle bir şablonuna üye şablonu denir.

Oluşturucular üyedir ve şablon yapmak için açıkça izin verilmez.

Örneğin, std::shared_ptr birçok template constructors ürününe sahiptir.

İlgili konular