C++ İle Otomatik Veri Tipi Algılama

ilyn

Üye
24 Ocak 2019
136
1
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:
Kod:
//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:

Kod:
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...
        }
}

Peki nasıl kullanırım?

Kod:
SuperVeriAlgilayici3000* oha = new SuperVeriAlgilayici3000(); //class olduğu için bunu yapmak zorundayım. 
                                                                                                               //En azından bunu yazarken class halinde işimi görüyordu.
oha->algila(6645, 6544877, 1, 0, -54487); //Buraya istediğiniz kadar veri girebilirsiniz, tabii tanımlı ise. Örn: algila(5454, "Selam", *(__int64*)(data + 12)...);


Bunu yazdıktan sonra bir kendime, bir de koda bakıyordum. İşimi o kadar çok kolaylaştırdı ki...

Uzun bir aradan sonra ilk konum. Biraz düz geçmiş olabilirim. Af ola :)

 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.