¿Hay alguna manera de usar el Named Constructor Idiom con plantillas de forma "bonita"?Named Constructor Idiom and Templates?
Por ejemplo:
#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;
}
Me gustaría utilizar la sintaxis de #1
de alguna manera. #2
funciona pero frota mi sentido DRY de la manera incorrecta.
EDITAR: Nueva versión más "realista" de Foo
.
Edit2: No C++ 0x/C++ 1x para mí Me temo :(
donde se # 2 o ¿se refiere a la _rvalue_ scoped correctamente llamada que no es ambiguo? ¿Consideras una solución más elegante como pasar el tamaño al constructor? – AJG85
En los comentarios marqué la segunda invocación de 'CopyClear()' como # 2. – genpfault