Khi sử dụng cú pháp khai báo hàm mới và decltype
, cách truy cập thành viên? Dường như this
không thể truy cập:C++ Truy cập điều này trong Cú pháp khai báo hàm mới
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;
};
này mang lại các lỗi biên dịch:
scratch.cpp:34:25: error: invalid use of ‘this’ at top level
trình biên dịch của tôi là g++ 4.6.2
.
workaround của tôi là để khai báo một thành viên tĩnh gọi self
với các loại tương tự như lớp, trong đó có hai vấn đề:
- Nó sẽ không nhặt CV-vòng tự động, giống như
this
sẽ . - Tôi phải di chuyển các khai báo thành viên lên trên việc sử dụng
decltype
hoặc không thể nhìn thấy thành viên (mặc dù điều đó có vẻ giống như lỗi trình biên dịch).
Tôi rất vui vì điều này khiến tôi đặt câu hỏi về sự tự tin của mình trong khả năng đọc tài liệu chuẩn. –
@TravisGockel: Nói chung, bạn nên giả định rằng nếu bạn đọc tài liệu chuẩn xung đột với GCC (hoặc bất kỳ trình biên dịch tại thời điểm này), nó có nhiều khả năng là trình biên dịch hơn đọc hiểu của bạn. –