【发布时间】:2011-07-13 02:06:07
【问题描述】:
有没有办法以“漂亮”的方式将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 正确范围的调用,它没有歧义?您是否考虑过更优雅的解决方案,例如将大小传递给构造函数?
-
在 cmets 中,我将
CopyClear()的第二次调用标记为 #2。
标签: c++ templates constructor