函数模板查找问题

Function template look-up issue

本文关键字:问题 查找 函数模板      更新时间:2023-10-16

有人可以解释为什么以下代码在编译时给出错误(error C2065: 'select' : undeclared identifier):

namespace N { 
    class MyClass{ 
    }; 
    template<int I> void select(MyClass*)
    {}
}
void g (N::MyClass* mp) 
{ 
    select<10>(mp); 
}
void main()
{}

根据参数相关查找,这应该可以正常工作,因为我在"g"的参数中指定了N::。因此,选择应该对编译器可见。

为什么 ADL 在这里不起作用?

你试过N::select吗?要么是那个,要么是

using namespace N

应该工作,因为简单的select是不可见

任何时候你使用一个与你当前所在的命名空间不同的命名空间中的类时,你必须直接引用它(N::select)或设置一个 using 命名空间 ( using namespace N; ) 或设置一个直接的 using 语句以供将来使用 ( using N::select

为了消除歧义,我会看看这个和这个,它们之间应该给你一个良好的开端,说明你如何/为什么你不能简单地调用选择。

干杯,并随时联系我以获取更多信息。