繁体   English   中英

VC ++ 2012:“使用依赖于参数的查找找到”解决方法?

[英]VC++ 2012: “found using argument-dependent lookup” work-around?

可能有人问过,但是我对如何使此代码与VC 2012一起使用很感兴趣:

#include <vector>

namespace ns {
   struct Obj { };
   template <class T> void swap(T& a, T& b) { }
}


int main(int argc, char* argv[])
{
   std::vector<ns::Obj> v;
   std::vector<ns::Obj>().swap(v); <-'std::swap' : ambiguous call to overloaded function
   return 0;
}

我必须使用此ns名称空间,并且无法更改它。 它必须能够在没有STL的情况下工作,并具有自己的swap()。 但是,如何与STL一起正确使用它呢?

好的,这是std :: vector()。swap(v)的解决方案:

namespace ns {
inline void swap(Obj*& a, Obj*& b) { }
inline void swap(Obj& a, Obj& b) { }
}

但是,这不是一般性的解决方法,因为我可以有以下内容:

std::map<int, std::map<int, ns::Obj>> m;
m[0] = m[1];

编辑:

这是在上述情况下有效的另一种方法

namespace ns {
template <class T> void swap(T* a, T* b) { }
inline void swap(Obj& a, Obj& b) { }
}
#ifdef NS_USE_STL

#include <utility>

namespace ns {

using std::swap;

}

#else

// define your own swap

#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM