Puntero a miembro de clase como parámetro de plantilla
Quiero usar un puntero a un miembro de la clase como un parámetro de plantilla como en:
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
Usando esta estructura comoMyStruct<SomeClass, SomeResult, &SomeClass::value> variable
Funciona bien, pero no me gusta que tenga que especificarSomeClass
ySomeResult
.
Me gustaria usarMyStruct<&SomeClass::value> variable
si eso es posible, pero sin perder la habilidad de pasar cualquier clase y tener cualquier tipo de resultado.
Intenté lo siguiente, pero la sintaxis es ilegal:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: demasiadas plantillas-listas-parametros
Intenté usar una función auxiliar (que en realidad funciona en Clang pero GCC lo rechaza):
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
error: uso del parámetro `miembro 'fuera del cuerpo de la función
error: el argumento de la plantilla 3 no es válido
¿Es posible tener un simpleMyStruct<&SomeClass::value>
, y si es así, ¿cómo?
Pregunta relacionada que no resolvió mi pregunta:
Puntero a miembro de clase como parámetro de plantillaError de C ++ 0x con constexpr y función de plantilla de retorno