lambda中的编译器不会“看到”模板类型

时间:2010-12-01 16:41:16

标签: c++ visual-studio visual-studio-2010 templates c++11

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 个答案:

答案 0 :(得分:3)

不知道为什么它不起作用。但这是一种解决方法。

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);
    });
}