में सीआरटीपी के साथ पॉलिसी-आधारित डिज़ाइन मिलाकर मैं एक नीति-आधारित मेजबान वर्ग (यानी, एक वर्ग जो अपनी टेम्पलेट कक्षा से विरासत में आता है) लिखने का प्रयास कर रहा हूं, जहां एक मोड़ के साथ पॉलिसी क्लास भी टेम्पलेट है मेजबान वर्ग, ताकि वह अपने प्रकारों तक पहुंच सके। एक उदाहरण जहां यह उपयोगी हो सकता है, जहां एक पॉलिसी (वास्तव में मिश्रित की तरह प्रयोग की जाती है), मेजबान वर्ग को पॉलिमॉर्फिक क्लोन() विधि के साथ बढ़ाती है। यहाँ मैं क्या कर रहा हूँ का एक न्यूनतम उदाहरण है:सी ++
template <template <class> class P>
struct Host : public P<Host<P> > {
typedef P<Host<P> > Base;
typedef Host* HostPtr;
Host(const Base& p) : Base(p) {}
};
template <class H>
struct Policy {
typedef typename H::HostPtr Hptr;
Hptr clone() const {
return Hptr(new H((Hptr)this));
}
};
Policy<Host<Policy> > p;
Host<Policy> h(p);
int main() {
return 0;
}
यह, दुर्भाग्य से, में संकलित करने के लिए, विफल रहता है क्या परिपत्र प्रकार निर्भरता की तरह मुझे लगता है:
try.cpp: In instantiation of ‘Host<Policy>’:
try.cpp:10: instantiated from ‘Policy<Host<Policy> >’
try.cpp:16: instantiated from here
try.cpp:2: error: invalid use of incomplete type ‘struct Policy<Host<Policy> >’
try.cpp:9: error: declaration of ‘struct Policy<Host<Policy> >’
try.cpp: In constructor ‘Host<P>::Host(const P<Host<P> >&) [with P = Policy]’:
try.cpp:17: instantiated from here
try.cpp:5: error: type ‘Policy<Host<Policy> >’ is not a direct base of ‘Host<Policy>’
किसी को भी एक पहचान सकते हैं तो स्पष्ट गलती, या सफलतापूर्वक नीतियों में सीआरटीपी मिश्रण है, मैं किसी भी मदद की सराहना करता हूं।