2011-04-02 23 views
14

:C++ 0x decltype ve kapsam çözünürlük operatörü

struct Foo { static const int i = 9; }; 

Ben GCC 4.5 reddedecektir bulmak aşağıdaki

Foo f; 
int x = decltype(f)::i; 

Bir kullanmak eğer çalışacaktır ara yazım hatası, örneğin:

typedef decltype(f) ftype; 
int x = ftype::i; 

Ancak isim alanını temiz tutmayı tercih ediyorum. Öncelikli bir sorun olabileceğini düşündüm, bu yüzden parantez de denedim, ama şans yok. Sunulan imkansız mı, yoksa bana yardımcı olabilecek bir sözdizimi mi var?

cevap

13

decltype(f)::i demek için C++ 0x değeri geçerlidir. GCC henüz desteklemiyor. Sen

template<typename T> struct identity { typedef T type; }; 
int x = identity<decltype(f)>::type::i; 

identityboost::mpl ad alanının parçası olan bir kimlik şablonu ile onu çalışabilirsiniz.

+0

Visual Studio 2010 bu sorundan da muzdarip. Güzel bir çözüm. –