SORU
12 NİSAN 2009, Pazar


STL algoritmaları kullanarak yerel sınıflar

Her zaman STL algoritmaları doğrulamaları olarak yerel olarak tanımlanmış sınıflar kullanamazsınız neden merak ettim.

Soru: diyor ki, bu söz BubbaT Approaching STL algorithms, lambda, local classes and other approaches,'C standardı bu yana yasaklar bağımsız değişken olarak kullanılmak üzere yerel çeşitleri'

Örnek kod:

int main() {
   int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   std::vector<int> v( array, array 10 );

   struct even : public std::unary_function<int,bool>
   {
      bool operator()( int x ) { return !( x % 2 ); }
   };
   std::remove_if( v.begin(), v.end(), even() ); // error
}

Herkes standart ürünler nerede olduğunu bilen var mı? İzin vermeme yerel türleri için gerekçe nedir?


EDİT: C beri 11, bunun yasal bir şablon bağımsız olarak, yerel bir tür kullanmaktır.

CEVAP
12 NİSAN 2009, Pazar


Açıkça C 98/03 standart tarafından yasaklandı.

Bu kısıtlamayı kaldırmak C 11.

Daha eksiksiz olması için :

Bu tip kısıtlamalar şablon parametreleri olarak kullanılırlistelenir C 03 madde 14.3.1(ve C 98) standart:

Yerel bir türü, hiçbir bağlantı ile bir tür, isimsiz bir türü ya da bir tür bileşik bu tür herhangi birinden olmayacaktır bir şablon bağımsız değişken olarak kullanılan tip-parametre şablonu.

template <class T> class Y { /* ... */  }; 
void func() {   
      struct S { /* ... */ }; //local class   
      Y< S > y1; // error: local type used as template-argument  
      Y< S* > y2; // error: pointer to local type used as template-argument }

Kaynak ve daha fazla ayrıntı : http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=420

Özetle, bu kısıtlama eğer standart daha hızlı gelişiyordu... er giderildi ki bu bir hataydı

Bu ortak uygulamaları en son sürümlerine ve izni ile birlikte lambda ifadeleri veren yok bugün dedi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010