मैं एन-टन बेस क्लास टेम्पलेट पर काम कर रहा हूं। मैं आलस्य के बारे में चिंता नहीं है अभी तक, इसलिए आशय है:औद्योगिक-शक्ति एन-टन बेस क्लास टेम्पलेट
सुनिश्चित करें एक वर्ग केवल n उदाहरण हैं, और उन्हें करने के लिए उपयोग की एक वैश्विक बिंदु प्रदान करते हैं। यहाँ
template<typename Derived, size_t n = 1> class n_ton_base // Singletons are the default { static Derived instances[n + (n == 0)]; // Zerotons are supported, too protected: // Prevent n_ton_base to be used outside of inheritance hierarchies n_ton_base() {} // Prevent n_ton_base (and Derived classes) from being copied n_ton_base(const n_ton_base&) = delete; public: // Get first element by default, useful for Singletons template<size_t i = 0> static Derived& get_instance() { static_assert(i < n, "Time to increase n it seems!"); return instances[i]; } };
और कैसे एक के लिए इसका इस्तेमाल होता है:
यहाँ मेरी कोड अब तक है
class SingletonExample : public n_ton_base<SingletonExample>
{
public:
void method()
{
std::cout << "Singletons are overused.\n";
}
};
class DoubletonExample : public n_ton_base<DoubletonExample, 2>
{
public:
void method()
{
std::cout << "Doubleton " << this << " says hello.\n";
}
};
int main()
{
SingletonExample::get_instance().method();
DoubletonExample::get_instance().method();
DoubletonExample::get_instance<0>().method();
DoubletonExample::get_instance<1>().method();
}
दुर्भाग्य से, कोड अभी तक संकलन नहीं करता है:
/tmp/ccsFtliS.o: In function `SingletonExample& n_ton_base<SingletonExample, 1ul>::get_instance<0ul>()':
nton.cpp:(.text._ZN10n_ton_baseI16SingletonExampleLm1EE12get_instanceILm0EEERS0_v[SingletonExample& n_ton_base<SingletonExample, 1ul>::get_instance<0ul>()]+0x5): undefined reference to `n_ton_base<SingletonExample, 1ul>::instances'
/tmp/ccsFtliS.o: In function `DoubletonExample& n_ton_base<DoubletonExample, 2ul>::get_instance<0ul>()':
nton.cpp:(.text._ZN10n_ton_baseI16DoubletonExampleLm2EE12get_instanceILm0EEERS0_v[DoubletonExample& n_ton_base<DoubletonExample, 2ul>::get_instance<0ul>()]+0x5): undefined reference to `n_ton_base<DoubletonExample, 2ul>::instances'
/tmp/ccsFtliS.o: In function `DoubletonExample& n_ton_base<DoubletonExample, 2ul>::get_instance<1ul>()':
nton.cpp:(.text._ZN10n_ton_baseI16DoubletonExampleLm2EE12get_instanceILm1EEERS0_v[DoubletonExample& n_ton_base<DoubletonExample, 2ul>::get_instance<1ul>()]+0x5): undefined reference to `n_ton_base<DoubletonExample, 2ul>::instances'
collect2: ld gab 1 als Ende-Status zurück
मैंने क्या गलत किया?
n_ton_base :: उदाहरण स्थैतिक हैं, इसलिए आपको इसे कहीं परिभाषित करना चाहिए। फिलहाल आप इसे केवल –
घोषित कर रहे हैं आपने स्थिर सरणी के लिए परिभाषा नहीं जोड़ा है? –
मैं इस साल के दहेज डिजाइन पैटर्न के रूप में वोट देता हूं। –