當使用新函數聲明語法和decltype
時,如何訪問一個成員?看來,this
不可訪問:C++在新函數聲明器中訪問此語法語法
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;
};
這產生編譯器錯誤:
scratch.cpp:34:25: error: invalid use of ‘this’ at top level
我的編譯器是g++ 4.6.2
。
我的解決方法是,聲明靜態成員叫self
與同類型的類,它有兩個問題:
- 它不會自動拾取的CV-預選賽,像
this
會。 - 我要移動的成員聲明以上的
decltype
使用或不能看到成員(儘管這似乎更像是一個編譯器錯誤)。
我很高興......這讓我質疑自己對標準文件閱讀能力的信心。 – 2012-02-21 21:50:49
@TravisGockel:一般來說,你應該假設如果你對標準文檔的閱讀與GCC(或此時的任何編譯器)衝突,那麼它更可能是編譯器而不是你的閱讀理解。 – 2012-02-21 21:58:07