Orijinal olarak C dilinde yazılmış büyük bir uygulama devraldım (ancak bu süre zarfında C++ da eklenmiştir). Tarihsel nedenlerden dolayı, uygulama çok sayıda boşluk işaretçisi içeriyor. Boğulmaya başlamadan önce, bunun neden yapıldığını açıklamama izin ver.Boşluk işaretçilerinden nasıl kurtululur
uygulama birçok farklı veri yapılarını içerir, ancak bunlar bir 'genel' kaplarda depolanır. Günümüzde şablonlar için templated STL kapsayıcılar kullanacağım, ya da tüm veri yapılarını ortak bir taban sınıfı verecektim, bu sayede konteynırlar temel sınıfa saklayabilir, fakat [iyi?] Eski C günlerinde tek çözüm Yapı işaretçisini bir boşluk işaretçisine çevirmek.
Ayrıca, orada bu boşluk sayılık çalışır kod bir sürü olduğunu ve kurtulmak için C
Şimdi uygulamayı reworking ve çalışıyorum polimorfik olduğu taklit çok garip C yapılar kullanır boşluk-işaretçiler. Tüm veri yapılarına ortak bir taban sınıfının eklenmesi o kadar da zor değildir (birkaç günlük çalışma), fakat problem, kodun aşağıda gösterilen yapılarla dolu olmasıdır.
Bu
verilerin depolandığı nasıl bir örnektir:void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
Bu nasıl veri örneği tekrar getirilirse:
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
Aslında tüm boşluk-işaretçileri değiştirmek istiyor Bazı akıllı işaretçi (referans sayılır), ama otomatik olarak (veya en azından) otomatik olarak tüm oyuncu kadrolarından ve boşluk işaretçilerinden kurtulmak için bana yardımcı olacak bir hile bulamıyorum. Yerini bulmak veya bu dönüşümleri ile herhangi bir şekilde etkileşim konusunda
Herhangi bir ipucu?
Bunu otomatik olarak yapmanın bir hile olmadığını düşünüyorum. Birbiri ardına ... – INS
Mağaza ve getirme işlevleri 'veri türü' ile ne yapar? Yapının kör bir kopyasını mı yapıyorlar yoksa sadece o boşluk işaretçisini mi saklıyorlar? –
Veri türü, aynı veri türündeki tüm verileri bir arada saklamak ve veri türlerinde bazı 'ortak' mantığı yürütmek için kullanılır. Söylendiği gibi, düz C'de polimorfizm öykünür. – Patrick