के साथ ऑटो + स्थैतिक इन-क्लास निरंतर इनइलाइलाइजेशन निम्नलिखित सरलीकृत टेम्पलेट मेटा-प्रोग्रामिंग कोड पर विचार करें जो Angle
कक्षा लागू करता है जो आंतरिक रूप से मॉड्यूल 360 डिग्री कम मूल्य को संग्रहीत करता है।मेटा-प्रोग्रामिंग
#include <iostream>
#include <typeinfo>
template<int N, int D>
struct Modulus
{
static auto const value = N % D;
};
template<int N>
struct Angle
{
static auto const value = Modulus<N, 360>::value; // ERROR
//static int const value = Modulus<N, 360>::value; // OK
//static auto const value = N % 360; // OK
typedef Angle<value> type;
};
int main()
{
std::cout << typeid(Angle<30>::type).name() << "\n";
std::cout << typeid(Angle<390>::type).name() << "\n";
return 0;
}
आउटपुट Ideone
Visual C++ 2010 एक्सप्रेस के साथपर, मैं static auto const = Modulus<N, 360>::value
कर सकते हैं, लेकिन MinGW जीसीसी 4.7.2 (Nuwen distro) या Ideone (जीसीसी 4.5.1) के साथ मैं या तो स्पष्ट निरूपित करने के लिए है static int const value = Modulus<N, 360>::value
के रूप में टाइप करें या मुझे auto
का उपयोग पूर्ण मॉड्यूलर अभिव्यक्ति के साथ static auto const value = N % 360;
के रूप में करना होगा।
प्रश्न: कौन सा कंपाइलर नए सी ++ 11 मानक के अनुरूप सही है?
हां, जीसीसी 4.5.1 में सी ++ 11 के लिए समर्थन अभी भी अधूरा है, आपको यह देखने के लिए http://gcc.gnu.org/projects/cxx0x.html की जांच करनी चाहिए कि कौन सी फीचर्स उपलब्ध हैं। –
@ एचवीडी, गलत। उनको कॉन्स्टेक्स घोषित किया जाना चाहिए। –
@ सेगफॉल्ट मुझे इन त्रुटियों को MinGW 4.7 – TemplateRex