क्या "सुंदर" फैशन में टेम्पलेट्स के साथ Named Constructor Idiom का उपयोग करने का कोई तरीका है?नामित कन्स्ट्रक्टर इडियॉम और टेम्पलेट्स?
उदाहरण के लिए:
#include <vector>
using namespace std;
template< typename T >
class Foo
{
public:
static Foo Copy(const T& arg)
{
Foo ret;
ret.t_copy = arg;
return ret;
}
static Foo CopyClear(const T& arg)
{
Foo ret;
ret.t_copy = arg;
ret.t_copy.clear();
return ret;
}
private:
T t_copy;
};
int main(int argc, char** argv)
{
vector<double> vec;
vec.push_back(1);
// #1: won't compile
Foo< vector<double> > a_foo = Foo::CopyClear(vec);
// #2: ugly, but works
Foo< vector<double> > a_foo = Foo< vector<double> >::CopyClear(vec);
return 0;
}
मैं किसी भी तरह #1
का सिंटैक्स का उपयोग करना चाहते हैं। #2
काम करता है लेकिन मेरे DRY को गलत तरीके से समझता है।
संपादित करें: Foo
का नया, अधिक "यथार्थवादी" संस्करण।
EDIT2: नहीं C++ 0x/C++ 1x मेरे लिए मुझे डर लग रहा :(
जहां # 2 या आप _rvalue_ की बात कर रहे है सही ढंग से कॉल कि अस्पष्ट नहीं है scoped? क्या आपने कन्स्ट्रक्टर में आकार को पार करने जैसे एक और अधिक सुरुचिपूर्ण समाधान पर विचार किया है? – AJG85
टिप्पणियों में मैंने 'CopyClear()' के दूसरे आमंत्रण को # 2 के रूप में चिह्नित किया। – genpfault