सबसे पहले, मुझे वास्तव में कोई समस्या नहीं है, लेकिन मुझे चीजों को यथासंभव सरल रखना पसंद है। मैं Math
नामक एक टेम्पलेट श्रेणी का उपयोग कर रहा हूं और कई अन्य सामानों के अलावा यादृच्छिक कार्य भी हैं।टेम्पलेटेड क्लास में स्टेटिक गैर टेम्पलेटेड फ़ंक्शन
यादृच्छिक कार्यों के विभिन्न प्रकार, और यादृच्छिक बीज सेट करने के लिए एक फ़ंक्शन। इसलिए बीज फ़ंक्शन को छोड़कर प्रत्येक फ़ंक्शन class Real
प्रकार का उपयोग करता है। लेकिन मैं पारित करने के लिए कुछ यादृच्छिक (haha) फ़ंक्शन को कॉल करने में सक्षम होना टाइप है जब मैं बीज सेट करना चाहते हैं:
Math<u32>::SeedRandom(System::time());
फिर इस एक वास्तविक समस्या नहीं है, लेकिन मैं उत्सुक अगर यह संभव है कर रहा हूँ <u32>
का उपयोग करने की आवश्यकता के बिना एक ही परिणाम प्राप्त करें।
गणित वर्ग से एक टुकड़ा:
template <class Real>
class Math
{
public:
static void SeedRandom(u32 seed) { srand(seed); }
static Real UnitRandom() { return (Real)((f64)rand()/(f64)RAND_MAX); }
};
btw। f64
double
और u32
से unsigned int
पर टाइप किया गया है।
हाँ, उस फ़ंक्शन को कॉल करने के लिए एक सिंगलटन ऑब्जेक्ट संभव होगा, लेकिन उस स्थिति में यह वास्तव में बदसूरत होगा :) बस यह जानना चाहता था कि कोड को कोड करने का कोई तरीका है, इसलिए इस प्रकार को निर्दिष्ट करने की कोई आवश्यकता नहीं है। मैंने थोड़ा सा प्रयास किया और इसे 'मठ :: SeedRandom ((u32) सिस्टम :: समय()) जैसे कॉल करना संभव है; '। यह कम से कम दिखाएगा कि इस प्रकार का उपयोग नहीं किया जाता है, लेकिन यह केवल अनावश्यक रूप से संकलित समय बनाता है, और यह और भी बदसूरत है तो बस '' के साथ कॉल करें। –
v01pe
@ v01pe: मेरी विकृत पक्षपातपूर्ण राय में 'शून्य *' का उपयोग करने का कोई मतलब नहीं है कि इस प्रकार का उपयोग नहीं किया जाता है। आईएमओ, जैसा कि मैंने पहले ही कहा है, फ्रीस्टैंडिंग फ़ंक्शन सबसे अच्छा समाधान है। फ्रीस्टैंडिंग फ़ंक्शंस किसी भी तरह से सीओ ++ –
में ओओपी के प्रतिमान का विरोध नहीं करते हैं बेशक आप सही हैं, 'शून्य *' का उपयोग करके इसका मतलब नहीं है! – v01pe