C++ İle Otomatik Veri Tipi Algılama

Drenated

Legend Member
Joined
Nov 23, 2019
Topics
454
Messages
1,853
Solutions
162
Reaction score
1,523
Bundan bir şey çıkarabilmek için ortalama C++ bilginizin olması lazım!!! En azından biraz template, typename & castlar(reinterpret).
İleri düzey programcılar için veri tiplerini tek tek işlemek (fun->setInt, setString vb...) bi hayli zordur ve görünüş bakımından kötü gözükürler. Aslında bunun kolay bir yolu var. Direkt adımları anlatıcam. Not: Bu kod sadece VS16 ve intellisense'nin Ocak 1, 2020 versiyonu ile test edildi. Kod biraz değişik olduğundan olur olmadık yerde intellisense hata doğurabilir. Neyse, ilk olarak intellisense'nin kudurmaması için bazı şeyleri tanımlayalım:
Code:
//Bu alanı istediğiniz yere yapıştırın yeter ki hata vermesin :)
typedef unsigned __int32  uint32; //uint32 bit, çok işe yarar
typedef const char* cStr; //direkt string, "Selam, nasılsın?" gibi. "Selam, " + std::to_string(14) + " nasılsın?" İÇİN DEĞİL!!!
typedef std::basic_string<char, struct std::char_traits<char>, class std::allocator<char> > eStr;
//İşte bu "Selam, " + std::to_string(14) + " nasılsın?" için. Açıklamama gerek yok bunu bilenler bilir :)

Şimdi sınıflara girelim:
Code:
class SuperVeriAlgilayici3000 { //Bu sınıf çok gereksiz biliyorum ama kim bilir ileride iş görür?
private:
        template<typename T>
        vo id veriyiTanimla(T t) {
              if (typeid(t) == typeid(__int32))
              {
                    int sonuc = reinterpret_cast<__int32>(t); //reinterpret kullanmak zorundayım :( intellisense sağ olsun
                    printf("INT32 Degerindeki sonuc: %d\n", sonuc);
          }
              //else-if kullanarak digerlerini de ekleyebirirsiniz
              else {
                   printf("Bu nasil bir veri tipidir arkadas? Tanimlamayi mi unuttun?\n");
              }
        }
public:
    template <typename... siradaki>
    **** algila(siradaki... degerler) {
        int cokGerekliBirsey[] = { 0, ((vo id)veriyiTanimla(forward<siradaki>(degerler)), 0) ... }; //evet, isimden de belli olduğu üzere...
        }
}


 

Top