Template metaprogramming

0

Ktos tego w pracy uzywa? Pytam, bo odswiezam sobie C++ i chce sobie priorytety odswiezania dobrze poustawiac.

Dzieki

2

Używam.

0

Często intensywnie.

1

A i owszem. Jak projekt dopuszcza i zespół rozumie to bardzo intensywnie.

1

Bardzo często używana rzecz.

0

Ja osobiście nie widzę sensu w TMP poza tworzeniem bibliotek. Wystarczy spojrzeć boosta, używa się go całkiem przyjemnie ale same źródła są ciężkie do czytania, a tworzyli go jedni z najlepszych speców C++ na świecie. Do tworzenia logiki apki wolę inne zabawki. Poza tym TMP od początku do końca rozumie chyba tylko jeden człowiek na świecie.

@mwl4 często używana ale chyba tylko w domach hobbystycznie. Widziałem sporo komercyjnego kodu małych i dużych vendorów i ciężko tam znaleźć ślad jakichkolwiek szablonów.

edit
A źródła STLa to dopiero są posrane.

1

Zależy o jakim TMP rozmawiamy.
TMP w rodzaju "policz mi w czasie kompilacji" (np. n-tą liczbę pierwszą) to raczej bardzo rzadko.
Programowanie generyczne w rodzaju "implementacja klasy dla 5-tego elementu podanego typu wyliczeniowego" - tylko w bibliotekach pomocnicznych (struktury danych).
Programowanie szablonowe typu funkcja round dla dowolnego typu zmienno-przecinkowego: bardzo często, w zasadzie nie wyobrażam sobie projektu bez tego.

0

Dzieki wszystkim za odpowiedzi.

Nie wiem czy wyrazilem sie odpowiednio, i czy przypadkiem nie wprowadzilem niechcaco w blad. Nie chodzi mi o to czy uzywa sie szablonow typu STL itd, tzn, ja doskonale sobie zdaje sprawe z tego ze cos takiego bedzie uzywane w pracy na porzadku dziennym:

find_if(vec.cbegin(), vec.cend(),[](auto v){return v < 10;});

Mi raczej chodzilo czy u was w pracy jestescie czesto pytani zeby napisac cos takiego:

template <typename LST> struct Length {
typedef typename LST::Tail Tail;
static const unsigned int tail_length = Length< Tail >::result;
static const unsigned int result = 1 + tail_length;
};

template <> struct Length<NIL> {
static const unsigned int result = 0;
};

Wiec? ;) Uzywacie takich cudow w pracy?

Dzieki

0

Jak dla mnie, wypowiedziałeś się jasno. Metaprogramowanie czyli np. praca z typami i funkcje operujące na typach.
Osobiście używam (kilka zastosowań) do:

  • optymalizacji struktur danych ze względu na przekazane przez arg. szablonu typy (np. sprawdzanie konieczności kopiowania i/lub przenoszenia)
  • obliczeń wykonywanych na etapie kompilacji (zależności czasowe, wartości do rejestrów sprzętowych, obliczanie stałych.. )
  • parametryzacji kodu tam gdzie wcześniej używano paskudnych makr (w trakcie refaktoryzacji i "odmakrowywania kodu")
  • specjalizacji struktur kolejkowych ze względu na typy komunikatów przesyłanych
  • mockowania kodu niskopoziomowego (kontrola wartości wpisywanych do rejestrów przez klasę)
  • "składania" klas przy niskim koszcie (najczęściej żadnym) w trakcie wykonania (zbliżone do polityk Alexandrescu :-) )
  • ...

I wiele innych. Nie ma co straszyć szablonami. Wystarczy się z nimi zapoznać i polubić :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1