模板类型没有被“看到”由编译器里面的一个lambda [英] Template type is not "seen" by the compiler inside a lambda

查看:106
本文介绍了模板类型没有被“看到”由编译器里面的一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆