Тип шаблона не «виден» компилятором внутри лямбды - PullRequest
2 голосов
/ 01 декабря 2010
template<typename Wcf, typename Wdb>
void ComputeGenericDropCount(const function<void(Wdb *, int)> &func)
{
    Wcf::ForEach([&](Wcf *wcf) {
        Wdb *wdb = Wdb::Find(wcf->sourceId); // <--- ERROR
            // error C2653: 'Wdb' : is not a class or namespace name


        if(wdb)
            func(wdb, wcf->itemCount);
    });
}

Это странно, потому что кажется, что "видит" Wcf без проблем, я даже использую его: wcf->itemCount.

Есть ли способ или причина, по которой это происходит?

1 Ответ

3 голосов
/ 01 декабря 2010

Не знаю, почему это не работает.Но вот обходной путь.

template<typename Wcf, typename Wdb>
void ComputeGenericDropCount(const function<void(Wdb *, int)> &func)
{
    auto my_find = Wdb::Find; // allows lambda to "capture" the correct function.
    Wcf::ForEach([&](Wcf *wcf) 
    {
        Wdb *wdb = my_find(wcf->sourceId);     

        if(wdb)
            func(wdb, wcf->itemCount);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...