bir yerine bir sınıf
No, bir işlev işaretçisi sağlayabilir, bu bir yanlış anlama. nesnesi nesnesi yerine yapıcı yapıcısına bir işlev gösterici sağlayabilirsiniz. Şablon parametresi hala bir tür - bu durumda bir işlev işaretçisinin türü. Yani, Sizin standart kütüphane ilk parametre için varsayılan değerini tanımlar ancak bu varsayılan değer standart değil
typedef unordered_map<
char const*, string,
size_t(*)(char const*), // type for hashing
bool(*)(char const*, char const*) // type for equality
> yourmaptype;
yourmaptype hm (
4, // minimum number of buckets
&unordered_hash, // function address for hashing
&unordered_eq, // function address for equality
);
yazmak zorunda. Satıcıya özgü varsayılan değerini n için tutmanın ve aynı zamanda functor'ların değerlerini ayarlamanın bir yolu yok gibi görünüyor. 4 kullanımım burada oldukça keyfi.
Bunun yerine, varsayılan yapılandırılabilir işlev nesnelerini kullanmayı düşünmelisiniz. Sadece bu minimim kova boyutunu belirlemeden kurtulmak için izin verecek, aynı zamanda daha hızlı olacaktır, çünkü funlator çok derleyici için inline daha kolay.
Dizeleri anahtar olarak kullanmak isterseniz, neden 'std :: string' kullanılmıyor? Dize değişmezleriyle de çalışır. –
Sadece bir örnek, 'Anahtar' herhangi bir şey olabilir. Yine de aradaki cevabı biliyorum, biri 'decltype (& unordered_hash)' ve 'decltype (& unordered_eq)' 'Hash' ve' Pred' olarak kullanabilir. Site haklı. – user1095108