प्राप्त करने के लिए टेम्पलेट पैरामीटर के नेस्टेड टाइपपीफ की जांच करें, नीचे घातीय चिकनी टेम्पलेट वर्ग पर विचार करें। यह वर्ग क्रमिक रूप से अनुक्रमिक डेटा को चिकनाई/फ़िल्टर करने के लिए है (अद्यतन विधि देखें)। एलेमटाइप एक वेक्टर हो सकता है और फ्लोटटाइप आमतौर पर एक स्केलर होता है। जैसेसी ++ अपने स्केलर बेस प्रकार
ExponentialSmoother<Eigen::Vector2f, float> x(0.1, Vector2f(0.5, 0.5));
इस उदाहरण में दूसरा टेम्पलेट पैरामीटर Floattype बचा जा सकता है क्योंकि Eigen के मैट्रिक्स वर्ग एक नेस्टेड typedef अदिश आधार प्रकार प्राप्त करने के लिए शामिल हैं:
Vector2f::Scalar
यह भी दोनों Elemtype और Floatype का दृष्टांत करने के लिए उचित है एक आयामी डेटा को सुचारू बनाने के लिए तैरता है। इस मामले में दूसरा टेम्पलेट पैरामीटर भी छोड़ा जा सकता है।
template <class Elemtype, class Floattype>
class ExponentialSmoother
{
public:
// ctor
ExponentialSmoother(Floattype alpha, Elemtype& initial_estimate);
// getters
inline const Elemtype& getValue() const {return estimate_;}
inline const Floattype getAlpha() const {return alpha_;}
const Elemtype& update(const Elemtype& curr)
{
estimate_ = (alpha_ * curr) + (((Floattype)1-alpha) * estimate_);
return estimate_;
}
private:
Elemtype estimate_;
Floattype alpha_; // smoothing factor within [0,1]
}
अब मेरे सवाल का क्या केवल एक टेम्पलेट पैरामीटर (तत्व प्रकार) के साथ ExponentialSmoother लागू करने के लिए "सबसे खूबसूरत" समाधान है? इसे ईजिन वैक्टर और मैट्रिस के साथ काम करना चाहिए, लेकिन फ्लोटिंग पॉइंट प्रकारों के साथ भी काम करना चाहिए।
दूसरे शब्दों में, क्या यह जांचना संभव है कि Elemtype :: Scalar मौजूद है और यदि नहीं (यानी Elemtype फ्लोट या डबल है) फ़्लैटाइप को एल्मटाइप के रूप में परिभाषित करता है?
एक समान प्रश्न पूछा गया है here। लेकिन मैं सोच रहा हूं कि सबसे सामान्य समाधान क्या है यदि उदाहरण के लिए एसटीएल वैक्टरों को भी समर्थन दिया जाना चाहिए। क्या सभी प्रकारों को एक ही नेस्टेड टाइपपीफ (या लगातार नामकरण वाले कुछ लक्षण वर्ग) की आवश्यकता होगी?
* क्या सभी प्रकारों को एक ही नेस्टेड टाइपपीफ (या लगातार नामकरण वाले कुछ लक्षण वर्ग) की आवश्यकता होगी? * - हाँ। –