c++ - lambda 内的编译器的模板类型不是 "seen"

标签 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

是否有任何解决方法或发生这种情况的原因?

最佳答案

不知道为什么不起作用。但这里有一个解决方法。

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

关于c++ - lambda 内的编译器的模板类型不是 "seen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326674/

相关文章:

c# - Visual Studio 智能感知类建议

windows - 为 Visual Studio 编译 FFMpeg 库

c# - 将 DataTable 分配给 DataGridView 时的 "NullReferenceException was unhandled"

c - 如何设置我的代码/VS10 以识别 .c 文件中的 CUDA 函数调用?

c++ - 是否有任何 SVM 库支持可与 Visual Studio C++ 一起使用的自定义内核?

c++ - QMainWindow 中的两个 QWidget 具有最小化按钮和窗口标题

c++ - 在继承的情况下不在此范围内声明

每个项目的 LINQ to SQL : Multiple/Single . dbml?

c++ - 为什么在第三个文件之前写入两个文件,即使指令是每次迭代都执行一个文件?

C++模板继承看不到基类成员