2017-05-18 61 views
6

Bir işlevin bir tablodan alınan bir değeri döndürmesi gereken bir durum var. Bu tablodaki bir hücre (tablonun sadece işe yaradığını varsayalım)) bir değer içerebilir veya olmayabilir. Bu değer ayrıca aşağıdakilerden biri olabilir: int, double, string, date (ama başka türde).Dönüş türü std :: isteğe bağlı <std :: variant <...>>

Böyle bir işlev ne işe yarar? std::optional<std::variant<std::string, int, double, std::chrono::time_point>>'u döndürmek iyi bir fikir mi?

optional ve variant iyi bir şekilde kullanılabilir mi?

+0

isteğe bağlı + değişken gibi bu gereksinimi çözebilir. – Kobi

cevap

11

Bunun, std::monostate'un yararlı bir kullanımı olduğunu düşünürüm. Spesifik olarak, variant<std::monostate, int, double, std::string, std::chrono::time_point>. monostate, variant'un bir değer içermediği durumlar için kullanışlıdır.

optional<variant> yerine gerçek bir tür kullanılmasıyla ilgili güzel şey, ziyaretin normal şekilde üzerinde çalıştığıdır. monostate parametresini alabilen bir functor yazabilir, böylece "boş" değişkenler için visit'u kullanmanıza izin verir.

+1

"Std :: variant'da iyi niyetli bir alternatif olarak kullanılmak üzere tasarlanan birim türü. [...]." Doğru sesler. http://en.cppreference.com/w/cpp/utility/variant/monostate – user2296177