¿Es posible emular la plantilla ?

¿Es de alguna manera posible? Quiero que para habilitar el paso de argumentos en tiempo de comstackción. Supongamos que es solo para comodidad del usuario, ya que uno siempre puede escribir el tipo real con la template , pero para algunos tipos, es decir, funciones de puntero a miembro, es bastante tedioso, incluso con decltype como atajo. Considera el siguiente código:

 struct Foo{ template void bar(){ // do something with X, compile-time passed } }; struct Baz{ void bang(){ } }; int main(){ Foo f; f.bar(); f.bar(); } 

¿Sería de alguna manera posible convertirlo a lo siguiente?

 struct Foo{ template void bar(){ // do something with X, compile-time passed } }; struct Baz{ void bang(){ } }; int main(){ Foo f; f.bar(); f.bar(); } 

Después de su actualización: no. No existe tal funcionalidad en C ++. Lo más cercano son las macros:

 #define AUTO_ARG(x) decltype(x), x f.bar(); f.bar(); 

Parece que quieres un generador:

 template  struct foo { foo(const T&) {} // do whatever }; template  foo make_foo(const T& x) { return foo(x); } 

Ahora en lugar de deletrear:

 foo(5); 

Tu puedes hacer:

 make_foo(5); 

Para deducir el argumento.

Fue agregado en C ++ 17 Ahora puedes escribir

 template struct B { /* ... */ }; B<5> b1; // OK: non-type template parameter type is int B<'a'> b2; // OK: non-type template parameter type is char 

Consulte http://en.cppreference.com/w/cpp/language/template_parameters , punto 4 de la sección Parámetro de plantilla sin tipo.

No es posible. La única forma de lograrlo es pasar argumentos a la función :

 struct Foo{ template void bar(T& X) {} }; 

Y luego llama a la función como,

 f.bar(5); f.bar(&Baz::bang);