Ben sahip olduğu, az ya da çok (o 32 ve 64-bit Linux üzerinde MSVC2k10 ve KİK hedeflediği anlamına gelir) bazı 'taşınabilir' kod yazıyorum:Global typecast operator aşırı yüklendi mi?
typedef unsigned char uint8;
C-dizeleri hep uint8 vardır ; Bu string işleme nedenleri içindir. Eski kodun char olarak imzalanmış olması gerekir, bu yüzden derleyici anahtarlarını imzasız olarak ayarlayamam. Ama indeksi çok iyi değil bir dizi bunu yapabilecek bir dize işleme ediyorsam:
char foo[500];
char *ptr = (foo + 4);
*ptr = some_array_that_normalizes_it[*ptr];
Sen endeksleyemez ciddi sonuçlar olmadan çalışma zamanında negatif bir sayı ile bir dizi. C-dizelerini imzasız tutmak, hatalardan daha kolay koruma sağlar.
Ben char * 's alır bir işlevi kullandığımda her zaman döküm (char *) tutmak zorunda kalmazsınız ve aynı zamanda sınıf işlevlerini çoğaltmalarını da engeller.
char foo[500] = "Hello!"; // Works
uint8 foo2[500] = "Hello!"; // Works
uint32 len = strlen(foo); // Works
uint32 len2 = strlen(foo2); // Doesn't work
uint32 len3 = strlen((char *)foo2); // Works
Muhtemelen uyarılar bu nitelikteki örtülü tip dönüşümleri izin vermeye: bir dizge sabit örtük *
int foo = strlen("Hello"); // "Hello" is passed as a char *
işe tüm bu istediğiniz bir char olarak geçirilir, çünkü bu özellikle bir acıdır Bununla birlikte, her seferinde bir kadroya sahip olmayan bir char * alan işlevleri kullanmak iyi olur.
Yani, böyle bir şey çalışmak düşündüm:
operator char* (const uint8* foo) { return (char *)foo; }
öyle değil Ancak. Çalışması için herhangi bir yol bulamıyorum. Ayrıca, bunu yapmanın bir yolu olmadığını gösteren bir şey bulamıyorum. Olası mantığı görebiliyorum - bunun gibi FAR'ın çok fazla hata nedeni olabilir - ama "C++ 'da çalışmayacak" ya da neden veya nasıl iş yapılacağını söyleyen hiçbir şey bulamıyorum (kısaca uin8'i saçma bir sınıf yapmak).
En az bir kullanıcı tanımlı tür içermeyen yayıncılar (veya işleçler) yazamazsınız –
'imzalı char' kullanan eski kodunuz var mı ?? Ben çok şüphe ediyorum ... –
neden uint8 bir sınıf saçma yapıyor? Bir sürü başıboş küresel döküm fonksiyonuna sahip olmaktan daha gülünç değil. – ThomasMcLeod