Harita kullanmalısınız. Farklı terimlerle düşünürseniz, gerçekten istediğiniz gibi bir std::unordered_map<Type, Object>
(yani, anahtarlar türler ve değerler, iyi değerlerdir). Bunun yerine, yaptığınız, anahtarların değerlerle aynı olduğu std::unordered_set<Object>
kullanıyor.
Bunun yerine, size de bir dizi kullanmak ve daha sonra nesnenin türünü kontrol edecek bir yüklemi
hana::find_if
kullanarak da eleman bulabilir, Aksi
auto myMap = hana::make_map(
hana::make_pair(hana::type_c<int>, 2),
hana::make_pair(hana::type_c<char const*>, "hi"),
hana::make_pair(hana::type_c<double>, 3.0)
);
std::cout << myMap[hana::type_c<char const*>] << std::endl;
yazmalı. Ancak bu daha az derleme zamanı verimli olacak, çünkü hana::find_if
doğrusal bir arama yapmalıdır.
Bir yan not olarak, yukarıdaki gerekçenin bir sonucu olarak, "hana :: set", derleme zamanında karşılaştırılabilecek nesneleri tutmak için yalnızca yararlıdır, çünkü bu nesneler anahtar olarak kullanılacaktır. Temel olarak, 'hana :: set', çalışma zamanı için neredeyse işe yaramazken, hana :: map 'anahtarlar derleme zamanı olduğu sürece anlamlı çalışma zamanı değerlerini koruyabilir. –
Tüm tipler benzersiz ve "hana :: Comparable" ise, çalışma zamanı değerleriyle birlikte kullanıldığında hana :: set 'yi görebiliyordum. Bazı durumlarda, bir haritadan daha verimli olabilir, çünkü çift oluşturmazdı ve sembol uzunluğu çok daha kısa olabilirdi. –
Ne demek hana :: find'? İsteğe bağlı olarak derleme zamanında bilinmesi gereken bir “hana :: optional” döndürmelidir. Bu nedenle, tuşların __at derleme-time__ olması gerekir. Aynı şeyin "hana :: tuple" için de geçerli olduğunu, ancak en azından "hana :: tuple" ın da endeksleri kullanarak erişebileceğini unutmayın, bu nedenle çalışma zamanı değerlerinin bir tuple olması mantıklıdır. –