Podczas korzystania z nowej składni deklaratora funkcji i decltype
, w jaki sposób jeden dostęp członków? Wydaje się, że this
nie jest dostępny:C++ Dostęp do tego w nowej funkcji Składnia deklaratora funkcji
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;
};
To daje błąd kompilatora:
scratch.cpp:34:25: error: invalid use of ‘this’ at top level
Moje kompilator jest g++ 4.6.2
.
Moje obejście jest zadeklarować członkiem statyczny nazywa self
tego samego typu co klasa, która ma dwa problemy:
- To nie będzie automatycznie odebrać CV kwalifikatorów, jak
this
będzie . - Muszę przenieść deklaracje członkowskie powyżej użycie
decltype
lub nie można go zobaczyć (chociaż wydaje się bardziej jak błąd kompilatora).
Cieszę się, że ... to sprawiło, że zadałem sobie pytanie, czy mam już dość niepewności co do mojej zdolności czytania dokumentu standardów. –
@TravisGockel: Generalnie powinieneś założyć, że jeśli czytanie standardowego dokumentu powoduje konflikty z GCC (lub jakimkolwiek kompilatorem w tym momencie), bardziej prawdopodobne jest, że będzie to kompilator niż twoje czytanie ze zrozumieniem. –