Partial Template Specialziation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Partial Template Specialziation etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Temmuz 2017 Pazartesi

Partial Template Specialziation

Giriş
Template için kullanılan bazı parametrelerin kod içinde belirlenmesi anlamına gelir. Template Specialization yazısına da göz atabilirsiniz.

Örnek - genişleme
Önce primary template yazılır. Şöyle yaparız.
template<typename T, int... N>
struct lookup_table_expand {
};
Sonra genişleyen kod yazılır. Şöyle yaparız. Burada kalıtım da kullanılıyor.
template<typename T, int L, int... N> 
struct lookup_table_expand<T, L, N...> :
  lookup_table_expand<T, L - 1, look_up_table_elem<T>(L - 1), N...> {
};
Daha sonra partial template specialization ile genişleme durdurulur. Genişleme L değeri 1 olunca durur. Şöyle yaparız.
template<typename T, int... N>
struct lookup_table_expand<T, 1, N...> {
  static constexpr std::array<T, sizeof...(N) + 1> values = {{
        look_up_table_elem<T>(0), N...
    }};
};
values değişkenine değer atamak için şöyle yaparız.
constexpr uint16_t look_up_table_elem(int i) {
    return ...;
}
Bu değişken static olduğu için bir tabloya doldurmak için şöyle yaparız.
const std::array<uint16_t, 2048> lookup_table =
  lookup_table_expand<uint16_t, 2048>::values;