Bak

2016-03-22 14 views
1

Aşağıdaki kod var:Bak

auto mySet = hana::make_set(2, "hi", 3.0); 

ben değerini belirli bir tip nasıl alabilirim ?:

std::cout << mySet[???] << std::endl; 

Like 'mySet [karakter *]' veya şey. Bunun için işe yaramalı mıyım yoksa haritayı mı kullanmalıyım?

cevap

2

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.

+1

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. –

+0

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. –

+0

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. –

İlgili konular