Tôi có mẫu lớp có hàm thành viên có lambda muốn sử dụng loại thông số mẫu lớp. Nó không biên dịch bên trong lambda nhưng thành công, như dự đoán, bên ngoài lambda.Truy cập loại tham số mẫu lớp bên trong hàm thành viên có lambda không thành công
struct wcout_reporter
{
static void report(const std::wstring& output)
{
std::wcout << output << std::endl;
}
};
template <typename reporter = wcout_reporter>
class agency
{
public:
void report_all()
{
reporter::report(L"dummy"); // Compiles.
std::for_each(reports_.begin(), reports_.end(), [this](const std::wstring& r)
{
reporter::report(r); // Fails to compile.
});
}
private:
std::vector<std::wstring> reports_;
};
int wmain(int /*argc*/, wchar_t* /*argv*/[])
{
agency<>().report_all();
return 0;
}
Các lỗi biên dịch:
error C2653: 'reporter' : is not a class or namespace name
Tại sao tôi không thể truy cập vào lớp mẫu tham số kiểu bên trong hàm thành viên lambda?
Tôi cần làm gì để truy cập vào loại thông số mẫu lớp bên trong hàm lambda thành viên?
Biên dịch đối với tôi trên GCC 4.6. Nền tảng/trình biên dịch của bạn là gì? –
@Kerrek: Visual C++ 2010. –