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
。
是否有任何解决方法或原因导致这种情况发生?
答案 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);
});
}