उत्सुकता से आवर्ती टेम्पलेट पैटर्न का उपयोग एक प्रकार के स्थैतिक बहुरूपता को लागू करने के लिए किया जा सकता है। उदाहरण के लिए:सीआरटीपी - आधार वर्ग से जांच कर रहा है कि व्युत्पन्न व्यक्ति
#include <iostream>
template<
class Derived
>
struct Base
{
static void print ()
{
std::cout << Derived::number_to_print << '\n';
}
};
struct Derived final :
Base<
Derived
>
{
static constexpr unsigned int number_to_print = 27;
};
int main ()
{
Derived::print();
}
इस रूप में की उम्मीद और प्रिंट 27
व्यवहार करता है।
अब, मैं आधार वर्ग के लिए जाँच करता है जोड़ने के लिए जोर देने के लिए है कि व्युत्पन्न वर्ग कुछ आवश्यकताओं को पूरा करना चाहते हैं। ऊपर दिए गए उदाहरण में, इस तरह की जांच हो सकता है:
#include <iostream>
#include <type_traits>
template<
class Derived
>
struct Base
{
// --- Checks begin
static_assert(std::is_same<
decltype(Derived::number_to_print),
unsigned int
>::value,
"static member `number_to_print' should be of type `unsigned int'");
// --- Checks end
static void print ()
{
std::cout << Derived::number_to_print << '\n';
}
};
struct Derived final :
Base<
Derived
>
{
static constexpr unsigned int number_to_print = 27;
};
int main ()
{
Derived::print();
}
इस बिंदु जहां Base<Derived>
instantiated है क्योंकि काम नहीं करता,, Derived
केवल आगे की घोषित किया गया है, यानी, यह अधूरा है, और यह कुछ भी नहीं की अभी तक इस तथ्य से परे जाना जाता है कि यह एक संरचना है।
मैं अपने सिर खरोंच किया गया है, के रूप में मुझे लगता है कि इन चेकों आधार वर्ग के उपयोगकर्ताओं के लिए मददगार साबित हो सकता है, लेकिन किसी भी तरह से यह करने के लिए नहीं मिला है।
क्या यह संभव है ?, और यदि हां, तो कैसे?
[इस पृष्ठ] (http://www.gotw.ca/publications/mxc++-item-4.htm) बहुत उपयोगी है। – Kalrish