yaparakİhtisas şablon
template <int n>
void f(){...};
ben n
belirli değerleri için bunu uzmanlaşmak biliyorum bir şablon Verilen:
template <>
void f<2>(){...};
Ama beni sağlayan bir yöntem yoktur Tüm pozitif n
için uzmanlaşmak için?
template <int n>
void f<n>(){
int dummy[n]; //invalid for n < 0
...
};
yapmayı düşündünüz Yani n<0
için bu kodu geçersiz ve derleyici önceki tanımına başvuracaktır. Ne yazık ki, tüm aldığım redefinition of 'void f<n>()'
hatasıdır.
Not: Sanırım bu muhtemelen standart tarafından desteklenmiyor. Bu efekti elde etmek için bir yöntem (belki de bazı şablon metaprogramlama) olup olmadığını soruyorum.
Stil konusu, ancak 'enable_if'i dönüş türüne koymayı tercih ediyorum, bu nedenle kafa karıştırıcı şeyler (kullanıcıların ve işlevlerin türü) etrafında asılı bir sihirli parametre yoktur. – GManNickG