Sırasıyla bir dizeyi ve uzunluğunu temsil eden char*
ve sayısal değeri kabul eden düşük düzeyli bir API ile çalışıyorum. Kodum std::basic_string
kullanıyor ve bu yöntemlere uygun çeviri ile çağrı yapıyor. Ne yazık ki, bu yöntemlerin birçoğu değişen boyuttaki dize uzunluklarını kabul eder (yani, max (unsigned char
), max (short
), vs.) ve dize örneklerimin belirtilen maksimum uzunluğu geçmediğinden emin olmak için yazı koduna takılıyorum Düşük seviyeli API ile.Bir uzunluk sınırlaması olan bir dizeyi uygulamak için bir tane std :: basic_string kaldırabilir mi?
Varsayılan olarak, std::basic_string
Örneğin maksimum uzunluğu maksimum değeri ile bağlıdır size_t
(ya max (unsigned int
) ya da maksimum (__int64
)). std::basic_string
uygulamasının özelliklerini ve ayırma uygulamalarını manipüle etmenin bir yolu var, böylece kendi türümü size_t
yerine kullanmak için belirtebilir miyim? Bunu yaparak, std::basic_string
uygulamasında varolan sınır denetimlerini kullanmayı umuyorum, böylece çeviriyi gerçekleştirirken bunu yapmak zorunda kalmam.
Benim ilk soruşturma bu benim kendi dize sınıf yazmadan mümkün olmadığını göstermektedir, ama ben ebeveyn olarak
Bir int şablon parametresi ekleyecektim ve max_size() return N; o zaman, typedef std :: basic_string , my_allocator > my256string; –
jmucchiello
'size_type' şablon argümanı olarak gösterilmesinin, kullanıcının hangi "size_type" öğesinin belirli bir string örneği için en uygun olduğunu seçmekte serbest olması yararlı olacaktır. Daha sonra kısmi şablon uzmanlığı, bu tür oyunların "basic_string" ile güzelleştirilmesinde yardımcı olacaktır. –