[英]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.