Merhaba arkadaşlar geçenlerde izlediğim bir videoda gördüğümü ve hoşuma giden bir C++ kütüphanesinden bahsedeceğim sizlere.
Kütüphanenin temel amacı eski enum’lar ve C++ 11 ile gelen enum class değerlerini string olarak derleme zamanında elde etmeyi amaçlayan bir kütüphane. Eminim siz c++ geliştiricileri hayatınızın bir noktasında buna ihtiyaç duymuşsunuzdur ve çok çeşitli yöntemlerde geliştirmişsinizdir. Her seferinde bunu daha farklı nasıl yapabilirim üzerine de muhtemelen kafa yormuşsunuzdur. İşte bu kütüphane bu anlamda size yardımcı olacaktır.
Kütüphanenin yaklaşık 8 dk lık videosuna aşağıdan ulaşabilirsiniz.
Ayrıca kütüphanenin kodlarına da aşağıdaki adresten ulaşabilirsiniz.
https://github.com/ToniBig/cpp-named-enum
Şimdi gelelim kütüphaneye. Kütüphaneye ilişkin görüşlerimi ve özet bilgileri sekme sekme vermek istiyorum. Daha detaylı öğrenmek istediğiniz bir husus olursa benim ile ya da yazar ile temasa geçebilirsiniz.
- Kütüphanenin genel özellikleri:
- Tek başlık dosyalı bir kütüphane (.h), “named_enum.hpp”
- Makro yapısı kullanılmaktadır
- Enum değer adetleri dönülebilmektedir
- Bu enum değerleri bir string dizisi olarak dönülebilmektedir (std::array<const char*, SIZE). Burada elbette ufak bir kaç güncelleme ile bunu std::string’e çevrilebileceğini düşünüyorum
- Verilen herhangi bir enum değerine karşılık gelen karakter dizisi dönülebilmektedir
- En önemlisi bütün bu karakter dizileri derleme zamanında oluşturulmaktadır
- Aşağıda kütüphanenin kapsamlı kullanımına ilişkin bir örneği alıp hemen kullanabilirsiniz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#include "named_enum.hpp" #include <iostream> // Aşağıdaki satır aslında şu şekilde bir enum tanımına karşılık gelmektedir // enum class Renkler // { // YESIL, // SARI, // KIRMIZI // }; MAKE_NAMED_ENUM_CLASS( Renkler, YESIL, SARI, KIRMIZI ); class TrafikIsigi { public: TrafikIsigi( Renkler color ) : mColor( color ) { std::cout << "Trafik sinyali su renk ile ilklendi: " << GetName( ) << std::endl; } void SetColor( Renkler color ) { mColor = color; std::cout << "Sinyal su sekilde ayarlandi: " << GetName( ) << std::endl; } Renkler GetColor( ) const { return mColor; } std::string GetName( ) const { return named_enum::name( mColor ); } private: Renkler mColor; }; int main( int argc, char **argv ) { TrafikIsigi signal( Renkler::KIRMIZI ); signal.SetColor( Renkler::SARI ); signal.SetColor( Renkler::YESIL ); auto currentColor = signal.GetName( ); std::cout << "Mevcut renk : " << currentColor << std::endl; std::cout << "Mevcut renkler:"; for ( const auto & color : named_enum::names<Renkler>( ) ) { std::cout << " " << color; } std::cout << std::endl; } |
Görüşmek dileğiyle. Kendinize iyi bakın…