में स्थिर constexpr साथ नीचे मेरी सरल उदाहरण पर विचार करें। क्लैंग में, हालांकि, यह त्रुटि no member named 'x' in 'Derived'
से संकलित करने में विफल रहता है। जहां तक मैं यह कह सकता हूं कि यह सही कोड है। क्या मैं कर रहा हूं उसके साथ कुछ गड़बड़ है, और यदि नहीं, तो क्या इस काम को क्लैंग में रखने का कोई तरीका है?मजे की बात है आवर्ती टेम्पलेट पैटर्न (CRTP) बजना
8
A
उत्तर
0
यह शायद इस सवाल का जवाब किसी के लिए देख रहा होगा नहीं है, लेकिन मैं एक तृतीय श्रेणी जोड़कर समस्या हल:
#include <iostream>
template <typename T>
class Base
{
public:
static constexpr int y = T::x;
};
class Data
{
public:
static constexpr int x = 5;
};
class Derived : public Base<Data>, public Data {};
int main()
{
std::cout << Derived::y << std::endl;
}
यह रूप में वांछित काम करता है, लेकिन दुर्भाग्य से यह वास्तव में लाभ नहीं है सीआरटीपी का!
1
टिप्पणियों में लिंक के रूप में, Initializing a static constexpr data member of the base class by using a static constexpr data member of the derived class बताता है कि क्लैंग व्यवहार सी ++ 14 तक मानक अनुरूप है। क्लैंग 3.9 से शुरू हो रहा है, आपका कोड -std=c++1z
के साथ सफलतापूर्वक संकलित करता है।
#include <iostream>
template <typename T>
class Base
{
public:
static constexpr int y() {return T::x();}
};
class Derived : public Base<Derived>
{
public:
static constexpr int x() {return 5;}
};
int main()
{
std::cout << Derived::y() << std::endl;
}
संबंधित मुद्दे
- 1. मजे की बात है आवर्ती टेम्पलेट पैटर्न और जेनरिक की कमी (सी #)
- 2. बजना और इंटेल इस CRTP कोड
- 3. C++ टेम्पलेट कोड आदेश पार्स/CRTP
- 4. "उत्सुकता से आवर्ती टेम्पलेट पैटर्न" के लिए प्रैक्टिकल उपयोग
- 5. == का उपयोग कब और कब उपयोग करना है? मजे की बात है
- 6. जब CRTP
- 7. क्यों स्पष्ट टेम्पलेट इन्स्टेन्शियशन की स्थिति बात
- 8. "टेम्पलेट" कीवर्ड की आवश्यकता नहीं है? [जीसीसी/बजना/Comeau बग?]
- 9. व्युत्पन्न दिलचस्प आवर्ती टेम्पलेट्स और सहप्रसरण
- 10. सी ++ और CRTP पैटर्न कार्यान्वयन और संकलक दुविधा
- 11. crtp और प्रकार दृश्यता
- 12. टेम्पलेट पैटर्न
- 13. CRTP में टेम्पलेट पैरामीटर के नेस्टेड वर्ग का उपयोग करना
- 14. बजना विम
- 15. बेनामी temporaries और वर्ग टेम्पलेट तर्क कटौती जीसीसी बजना
- 16. बजना
- 17. बजना
- 18. बात का अनुमान लगाना टेम्पलेट तर्क विफल रहता है
- 19. सख्त घोषणा की बात क्या है?
- 20. एंड्रॉइड सिंक एडाप्टर से प्रगति की बात कैसे सुनती है?
- 21. क्या इस पैटर्न की बात है: एक struct का उपयोग कर एक एकल विधि
- 22. परीक्षण की बात% eax% eax
- 23. यह सी ++ टेम्पलेट मैक्रो का क्या अर्थ है?
- 24. खाका जीसीसी के साथ दोस्ती त्रुटि संकलन लेकिन नहीं बजना
- 25. उद्देश्य-सी - टेम्पलेट विधियों पैटर्न?
- 26. सी ++ 11: टेम्पलेट मानकों में SFINAE, जीसीसी बनाम बजना
- 27. ऑपरेटर << टेम्पलेट तर्क प्रकार पर सदस्य केवल बजना
- 28. संकलक त्रुटि static_assert साथ CRTP का उपयोग कर
- 29. चेतन आवर्ती UIImageView
- 30. रेल - पेपैल-आवर्ती मणि
बहुत समान प्रश्न: http://stackoverflow.com/q/35759047/996886 – melak47
यदि आप '' y' Base' के बाहर प्रारंभ एक आसान संभावित समाधान, मान के स्थान पर constexpr कार्यों का उपयोग करने के लिए है कक्षा क्या यह काम करती है? –
@ बेन आप कक्षा के बाहर 'constexpr स्थिर int' intialize नहीं कर सकते हैं। – melak47