Ian*_*Ian 4 c++ swap overloading visual-studio-2010
我想在我的模板类中重载std :: swap.在以下代码中(简化)
#ifndef Point2D_H
#define Point2D_H
template <class T>
class Point2D
{
protected:
T x;
T y;
public:
Point2D () : x ( 0 ), y ( 0 ) {}
Point2D( const T &x_, const T &y_ ) : x ( x_ ), y ( y_ ) {}
....
public:
void swap ( Point2D <T> &p );
};
template <class T>
inline void swap ( Point2D <T> &p1, Point2D <T> &p2 ) { p1.swap ( p2 ); }
namespace std
{
template <class T>
inline void swap ( Point2D <T> &p1, Point2D <T> &p2 ) { p1.swap ( p2 ); }
}
template <class T>
void Point2D <T>::swap ( Point2D <T> &p )
{
using (std::swap);
swap ( x, p.x );
swap ( y, p.y );
}
#endif
Run Code Online (Sandbox Code Playgroud)
存在编译器错误(仅在VS 2010中):
error C2668: 'std::swap' : ambiguous call to overloaded
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,std :: swap应该被overoaded ...使用g ++代码可以很好地工作.没有模板(即Point2D不是模板类),这个代码也可以工作..
谢谢你的帮助.
请参阅如何重载std :: swap().基本上,您可以对std :: swap进行专门化,但不能过载.
因此,可以为特定Point<>
类型(例如Point<float>
)创建特定版本,但不能为任何类型创建Point<T>
.
归档时间: |
|
查看次数: |
1702 次 |
最近记录: |