Podczas implementacji funkcji zwrotnej w C ++, czy nadal powinienem używać wskaźnika funkcji w stylu C: void (*callbackFunc)(int); Czy powinienem użyć std :: function: std::function< void(int) > callbackFunc;
Tradycyjnie, standardowym i przenośnym sposobem uniknięcia wielu włączeń nagłówków w C ++ było / jest użycie #ifndef - #define - #endifschematu dyrektyw prekompilatora, zwanego również schematem ochrony makr (zobacz fragment kodu poniżej). #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif Jednak w większości implementacji / kompilatorów (patrz rysunek poniżej) istnieje bardziej „elegancka” …
Czasami muszę użyć, std::threadaby przyspieszyć moją aplikację. Wiem też, że join()czeka, aż wątek się zakończy. Łatwo to zrozumieć, ale jaka jest różnica między dzwonieniem detach()a nie dzwonieniem? Pomyślałem, że bez detach()wątku metoda wątku będzie działać niezależnie od wątku. Nie odłączanie: void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called …
Nie muszę poprawnie kończyć wątku ani zmuszać go do odpowiedzi na polecenie „zakończ”. Jestem zainteresowany wymuszeniem zakończenia wątku przy użyciu czystego C ++ 11.
C ++ 11 wprowadza zdefiniowane przez użytkownika literały , które pozwolą na wprowadzenie nowej składni dosłownym opartą na istniejących literały ( int, hex, string, float), tak, że każdy rodzaj będzie mógł mieć dosłownego prezentacji. Przykłady: // imaginary numbers std::complex<long double> operator "" _i(long double d) // cooked form { return …
Byłem w jakiś sposób zaskoczony, że poniższy kod kompiluje się i działa (vc2012 i gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok …
Z tego, co zobaczyłem w tym poście , postanowiłem zacząć czytać książkę Efektywne C ++ . Ale teraz, gdy pojawiło się wiele nowych funkcji dzięki C ++ 11 i zmieniło się kilka dobrych praktyk, nie jestem pewien, czy jest to w rzeczywistości dobry pomysł. Czy pojawienie się C ++ 11 …
Proszę o sztuczkę szablonową, aby wykryć, czy klasa ma określoną funkcję członkowską danego podpisu. Problem jest podobny do tego cytowanego tutaj http://www.gotw.ca/gotw/071.htm, ale nie ten sam: w pozycji książki Suttera odpowiedział na pytanie, że klasa C MUSI ZAPEWNIĆ funkcję składową z konkretny podpis, w przeciwnym razie program się nie skompiluje. …
Odpowiednie pytania : O C ++ 11: C ++ 11: std :: thread pooled? Czy async (launch :: async) w C ++ 11 sprawi, że pule wątków będą przestarzałe, aby uniknąć kosztownego tworzenia wątków? O Boost: C ++ usprawnia ponowne wykorzystanie wątków w wątku boost :: thread i tworząc ich …
Czy norma precyzyjnie określa, co mogę zrobić z przedmiotem po jego przeniesieniu? Kiedyś myślałem, że wszystko, co można zrobić z przeniesionym obiektem, to go zniszczyć, ale to nie wystarczy. Na przykład weź szablon funkcji swapzdefiniowany w bibliotece standardowej: template <typename T> void swap(T& a, T& b) { T c = …
Możliwość tworzenia i manipulowania napisami podczas kompilacji w C ++ ma kilka przydatnych aplikacji. Chociaż możliwe jest tworzenie ciągów znaków czasu kompilacji w C ++, proces ten jest bardzo uciążliwy, ponieważ ciąg musi być zadeklarowany jako zmienna sekwencja znaków, np. using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' …
Mylę się z różnicą między przyszłością a obietnicą. Oczywiście mają różne metody i rzeczy, ale jaki jest faktyczny przypadek użycia? Czy to jest ?: kiedy zarządzam jakimś zadaniem asynchronicznym, używam przyszłości, aby uzyskać wartość „w przyszłości” kiedy jestem zadaniem asynchronicznym, używam obietnicy jako typu zwracanego, aby umożliwić użytkownikowi uzyskanie przyszłości …
Krótkie zachowanie operatorów &&i ||jest niesamowitym narzędziem dla programistów. Ale dlaczego tracą to zachowanie, gdy są przeciążone? Rozumiem, że operatory są jedynie cukrem syntaktycznym dla funkcji, ale operatory dla boolmają takie zachowanie, dlaczego miałoby być ograniczone do tego jednego typu? Czy jest za tym jakieś techniczne uzasadnienie?
(Uwaga: to pytanie dotyczy braku konieczności określania liczby elementów i nadal zezwala na bezpośrednie inicjowanie typów zagnieżdżonych). To pytanie omawia zastosowania pozostawione dla tablicy C, takiej jak int arr[20];. W swojej odpowiedzi @James Kanze pokazuje jeden z ostatnich bastionów tablic C, jego unikalne cechy inicjalizacji: int arr[] = { 1, …
Podczas pracy z wątkowym modelem C ++ 11 zauważyłem to std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; i auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << …
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.