Pytania otagowane jako template-meta-programming

27
Szablonowe sprawdzenie, czy istnieje funkcja członka klasy?
Czy można napisać szablon, który zmienia zachowanie w zależności od tego, czy określona funkcja elementu jest zdefiniowana w klasie? Oto prosty przykład tego, co chciałbym napisać: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } Tak więc, jeśli class Tzostał toString()zdefiniowany, to korzysta …

20
Jak możesz iterować po elementach std :: tuple?
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ę …


1
więcej duchowego szaleństwa - typy parserów (reguły vs int_parser <>) i techniki metaprogramowania
Pytanie jest pogrubione u dołu, problem jest również podsumowany fragmentem kodu destylacji pod koniec. Próbuję ujednolicić mój system typów (system typów robi do i od typu do ciągu) w jeden komponent (zgodnie z definicją Lakos). Używam boost::array, boost::variantoraz boost::mplw celu osiągnięcia tego celu. Chcę, aby reguły parsera i generatora dla …

3
Jak uzyskać głębokość wielowymiarowego std :: vector w czasie kompilacji?
Mam funkcję, która przyjmuje wielowymiarowość std::vectori wymaga podania głębokości (lub liczby wymiarów) jako parametru szablonu. Zamiast na stałe wpisywać tę wartość, chciałbym napisać constexprfunkcję, która pobierze std::vectori zwróci głębokość jako unsigned integerwartość. Na przykład: std::vector&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt; v = { { { 0, 1}, { 2, 3 } }, { { 4, …

4
Programowanie meta szablonów
Czy ktoś może mi wyjaśnić, dlaczego pierwszy sposób metaprogramowania szablonów prowadzi do nieskończonej pętli, ale drugi działa poprawnie. #include &lt;iostream&gt; using namespace std; template&lt;int N, int M&gt; struct commondivs { static const int val = (N&lt;M) ? commondivs&lt;N,(M-N)&gt;::val : commondivs&lt;(N-M),M&gt;::val; }; template&lt;int N&gt; struct commondivs&lt;N,N&gt; { static const int val …

2
Przekazywanie koncepcji do funkcji
Skoro pojęcia są zdefiniowane jako predykaty czasu kompilacji, czy możliwe jest również ponowne wykorzystanie tych predykatów dla algorytmów kompilacji? Czy na przykład można sprawdzić, czy wszystkie typy w krotce są zgodne z koncepcją? O ile widziałem, nie można w żaden sposób przekazać koncepcji do funkcji, co prowadzi mnie z powrotem …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.