alguien ya hizo esta pregunta, pero el hilo terminó con la pregunta original sin respuesta.operador con plantilla() sobrecarga C++
suponga que tiene esto:
template<size_t i, class f_type>
void call_with_i(f_type f);
functor_type es o bien:
a) una estructura con un método que tiene la firma siguiente:
template<size_t i> operator()() const;
o, b) una función que se ve así:
template<size_t i> foo();
quiero "call_with_i < 42> (foo)" es equivalente a "foo < 42>()", pero no puedo averiguar la sintaxis correcta para que esto suceda. Estaría satified con una solución que hace simplemente (a)
pero (a) + (b) sería genial
. Ya he probado estas sintaxis:
f<i>(); // doesn't work
f()<i>; // doesn't work
f.operator<i>(); // doesn't work
f.operator()<i>; // doesn't work
f.operator()<i>(); // works on msvc, but doesn't work on gcc.
¿Cómo se invoca el operador() con argumentos de plantilla explícitas?
¿Hay alguna manera de invocarlo de modo que la misma sintaxis también llame a una función libre con plantilla?
p.s. Si se está preguntando para qué estoy usando esto, es porque estoy escribiendo una función repeat_to donde repeat_to < 10> (f) invoca f (0) luego f (1) ... f (10). Estoy usando esto para iterar a través de múltiples vectores boost :: fusion en paralelo por índice. Sí, podría usar iteradores, o simplemente podría usar una función de miembro con nombre, pero aún quiero saber la respuesta.
editar nota: me llamó la atención porque pasar una función libre de plantilla como un arg no tiene ningún sentido.
No se respondió porque no puede. – GManNickG