2010-01-30 21 views
10

Oluşturulan bazı türleri tutmak için bir yükseltme varyantı kullanıyorum, şu anda kod üreteci, türleri ve bunları tutabilen bir türe sahip bir başlık oluşturur. Başlatma zamanında, varyantın şu anda tuttuğu türlere değil, varyanttaki izin verilen türler üzerinde yinelemek istiyorum.Bir destekte türlerin üzerinde geçiş yapma :: variant

Bunu bir varyantla yapabilir miyim?

+0

kullanarak MPL listeleri üzerinden yapabilirsiniz. –

+0

Bir harita doldurmam gerekiyor. – swarfrat

cevap

19

boost::variant, türlerini bir MPL listesi olan types aracılığıyla gösterir. Çalışma zamanı işlemlerini, mpl::for_each:

struct printer { 
    template<class T> void operator()(T t) { 
     std::cout << typeid(T).name() << std::endl; 
    } 
}; 

// ... 
typedef boost::variant<int, char> var; 
boost::mpl::for_each<var::types>(printer()); 
+0

Yararlı bir insansınız. Bazı türler varsayılan olarak yapılandırılamıyorsa, teşekkürler =] – taxilian

+0

, boost :: mpl :: make_identity <> türüne ihtiyaç duyabilir. – TemplateRex

İlgili konular