Sınıf şablonu parametre türünü kullanmak isteyen bir lambdaya sahip üye işlevi olan bir sınıf şablonum var. Lambda içinde derlenemez, ancak lambda dışında beklenen şekilde başarılı olur.Bir lambda ile üye işlevi içinde bir sınıf işlevi parametre türüne erişme başarısız oluyor
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;
}
derleme hatası:
error C2653: 'reporter' : is not a class or namespace name
Neden üye işlev lambda içindeki sınıf şablonu parametre türünü erişemiyorum?
Sınıf elemanı parametre türüne lambda üye işlevi içinde erişmek için ne yapmam gerekir?
GCC 4.6 benim için derler. Platformunuz/derleyiciniz nedir? –
@Kerrek: Visual C++ 2010. –