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 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;
Hiç yorum yok:
Yorum Gönder