Rysunek 1: szablony funkcji TemplHeader.h template<typename T> void f(); TemplCpp.cpp template<typename T> void f(){ //... } //explicit instantation template void f<T>(); Main.cpp #include "TemplHeader.h" extern template void f<T>(); //is this correct? int main() { f<char>(); return 0; } Czy jest to właściwy sposób użycia extern template, czy też używam tego …
Słyszałem, że constoznacza to bezpieczeństwo wątków w C ++ 11 . Czy to prawda? Czy to znaczy, constjest teraz odpowiednikiem Javy s” synchronized? Czy kończą się słowa kluczowe ?
Mam klasę o nazwie, Writerktóra ma taką funkcję writeVector: void Drawer::writeVector(vector<T> vec, bool index=true) { for (unsigned int i = 0; i < vec.size(); i++) { if (index) { cout << i << "\t"; } cout << vec[i] << "\n"; } } Staram się nie mieć duplikatu kodu, jednocześnie martwiąc …
const auto&wystarczy, jeśli chcę wykonywać operacje tylko do odczytu. Jednak wpadłem na for (auto&& e : v) // v is non-const ostatnio kilka razy. To sprawia, że zastanawiam się: Czy to możliwe, że w niektórych niejasnych przypadkach narożnych korzystanie z odniesień do przekazywania przynosi pewne korzyści w zakresie wydajności w …
Właśnie pisałem generyczną fabrykę obiektów i korzystałem z meta-biblioteki preprocesora boost, aby stworzyć szablon wariadyczny (używając 2010 i nie obsługuje ich). Moja funkcja korzysta z referencji rval i std::forwardaby wykonać doskonałe przekazywanie, i pomyślałem ... kiedy pojawi się C ++ 0X i mam standardowy kompilator, zrobiłbym to z prawdziwymi szablonami …
Właśnie straciłem trzy dni mojego życia, szukając bardzo dziwnego błędu, w którym unordered_map :: insert () niszczy wstawioną zmienną. To wysoce nieoczywiste zachowanie występuje tylko w najnowszych kompilatorach: stwierdziłem, że Clang 3.2-3.4 i GCC 4.8 są jedynymi kompilatorami, które zademonstrowały tę „funkcję”. Oto trochę zredukowany kod z mojej głównej bazy …
C ++ 11 zapewnia wiele sposobów iteracji po kontenerach. Na przykład: Pętla oparta na zakresie for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) Jednak jaki jest zalecany sposób iteracji na dwóch (lub więcej) kontenerach tego samego rozmiaru, aby osiągnąć coś takiego: for(unsigned i = 0; i < containerA.size(); ++i) …
Mam kod mniej więcej taki: #include <bitset> enum Flags { A = 1, B = 2, C = 3, D = 5, E = 8, F = 13, G = 21, H, I, J, K, L, M, N, O }; void apply_known_mask(std::bitset<64> &bits) { const Flags important_bits[] = { B, …
Jak mogę iterować po krotce (używając C ++ 11)? Wypróbowałem następujące: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); ale to nie działa: Błąd 1: przepraszam, nie zaimplementowano: nie można rozwinąć „Listener ...” do listy argumentów o stałej długości. Błąd 2: nie mogę pojawić się w stałym wyrażeniu. Jak więc poprawnie wykonać iterację …
Wydaje mi się, że widzę wiele odpowiedzi, w których ktoś sugeruje użycie <random>do generowania liczb losowych, zwykle wraz z takim kodem: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen); Zwykle zastępuje to jakąś „przeklętą obrzydliwość”, taką jak: srand(time(NULL)); rand()%6; Możemy krytykować stary sposób, argumentując, że time(NULL)zapewnia niską entropię, time(NULL)jest przewidywalny, …
W C ++ 11 możemy napisać taki kod: struct Cat { Cat(){} }; const Cat cat; std::move(cat); //this is valid in C++11 kiedy dzwonię std::move, to znaczy, że chcę przesunąć obiekt, czyli zmienię obiekt. Przesuwanie constobiektu jest nierozsądne, więc dlaczego std::movenie ogranicza tego zachowania? To będzie pułapka w przyszłości, prawda? …
Generalnie zakładam, że strumienie nie są zsynchronizowane, to do użytkownika należy odpowiednie zablokowanie. Czy jednak takie rzeczy jak coutbiblioteka standardowa są traktowane w specjalny sposób? Oznacza to, że jeśli wiele wątków pisze do, coutczy mogą uszkodzić coutobiekt? Rozumiem, że nawet po zsynchronizowaniu nadal otrzymujesz wyjście z przeplotem losowo, ale czy …
Czy istnieje sposób na przekonwertowanie enum classpola na typ bazowy? Myślałem, że to będzie automatyczne, ale najwyraźniej nie. enum class my_fields : unsigned { field = 1 }; unsigned a = my_fields::field; To przypisanie jest odrzucane przez GCC. error: cannot convert 'my_fields' to 'unsigned int' in assignment.
W przypadku prawie całego kodu, który piszę, często mam do czynienia z problemami z redukcją zestawów na kolekcjach, które ostatecznie kończą się naiwnymi warunkami „jeśli” w nich. Oto prosty przykład: for(int i=0; i<myCollection.size(); i++) { if (myCollection[i] == SOMETHING) { DoStuff(); } } Dzięki językom funkcjonalnym mogę rozwiązać problem, redukując …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.