estoy tratando de escribir algo como:¿Cómo paso una plantilla como parámetro de plantilla a una plantilla?
// I don't know how this particular syntax should look...
template<typename template<typename Ty> FunctorT>
Something MergeSomething(const Something& lhs, const Something& rhs)
{
Something result(lhs);
if (lhs.IsUnsigned() && rhs.IsUnsigned())
{
result.SetUnsigned(FunctorT<unsigned __int64>()(lhs.UnsignedValue(), rhs.UnsignedValue()));
}
else
{
result.SetSigned(FunctorT<__int64>()(lhs.SignedValue(), rhs.SignedValue()));
}
return result;
}
que se utilizaría como:
Something a, b;
Something c = MergeSomething<std::plus>(a, b);
¿Cómo se hace eso?
No sería una simple 'plantilla' suficiente y luego pasar 'MergeSomething >;' de lo contrario tal vez un pico bajo las tapas de 'boost :: function' o' boost :: bind' podría dar alguna idea –
AJG85
@ AJG85: No - si miras el código de ejemplo estoy llamando a la función de plantilla con diferentes argumentos de plantilla dentro de mi propia plantilla de función. –
Ah, sí, así es, supongo que esto es un código simplificado y la determinación del tipo no es tan trivial en realidad. Buena pregunta, creo que podría tener algunas clases genéricas de almacenamiento que podrían beneficiarse de algo como esto. – AJG85