Al usar la nueva sintaxis del declarador de funciones y decltype
, ¿cómo se accede a los miembros? Parece que no es accesible this
:C++ Acceda a esto en la Sintaxis del nuevo declarador de funciones
template <typename Func>
struct context_binder
{
public:
context_binder(const Func& func) :
func(func)
{ }
template <typename... TArgs>
auto operator()(TArgs&&... args) const
-> decltype(this->func(std::forward<TArgs>(args)...))
{
return func(std::forward<TArgs>(args)...);
}
private:
Func func;
};
Esto produce el error del compilador:
scratch.cpp:34:25: error: invalid use of ‘this’ at top level
Mi compilador es g++ 4.6.2
.
Mi solución es declarar un miembro estático llamado self
con el mismo tipo que la clase, que tiene dos problemas:
- No va a recoger a la CV-calificadores de forma automática, como
this
haría . - Tengo que mover las declaraciones de miembro anterior el uso
decltype
o no puede ver el miembro (aunque eso parece más como un error del compilador).
Me alegro ... esto me estaba haciendo cuestionar mi confianza ya inestable en mi capacidad para leer el documento de estándares. –
@TravisGockel: en general, debe suponer que si su lectura del documento estándar entra en conflicto con GCC (o cualquier compilador en este punto), es más probable que sea el compilador que su comprensión de lectura. –