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
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.
Bir paket yansıma kullanarak tüm sınıf...
Bulma Yerel IP adresleri'In Pytho...
Gıt değişikliği nasıl bulabilirim aras...
HTML kullanarak ve Yerel Görüntüleri U...
Kullanarak soyut sınıflar test için Mo...