模板类型没有被“看到”由编译器里面的一个lambda [英] Template type is not "seen" by the compiler inside a lambda
本文介绍了模板类型没有被“看到”由编译器里面的一个lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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
。
It's weird because it seems to "see" Wcf
without problems, I even use it: wcf->itemCount
.
有任何解决方法或原因,为什么会发生这种情况?
Is there any workaround or reason why this is happening?
推荐答案
不知道为什么它不工作。
Don't know why it doesn't work. But here is a workaround.
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);
});
}
这篇关于模板类型没有被“看到”由编译器里面的一个lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文