그래서 매크로가 있습니다.매크로를 사용하여 std :: swap을 전문적으로 사용할 수 있습니까?
// swap_specialize.hpp
#include <algorithm>
#ifndef STD_SWAP_SPECIALIZE
#define STD_SWAP_SPECIALIZE(CLASSNAME) \
namespace std { \
template<> inline \
void swap(CLASSNAME & lhs, CLASSNAME & rhs) \
{ lhs.swap(rhs); } }
#endif
그래서 나는 클래스
// c.hpp
#include <vector>
#include "swap_specialize.hpp"
class C
{
public:
C();
void swap(C& rhs)
{
data_.swap(rhs.data_);
}
C& operator=(C rhs)
{
rhs.swap(*this);
return *this;
}
private:
std::vector<int> data_;
}
STD_SWAP_SPECIALIZE(C)
이 작업을 수행하기 위해, 문체,이 나쁜 있나요? 코드 냄새입니까? 아니면 괜찮은 연습일까요?
나는 잘 모르겠다. 'c.swap (d);를 수동으로 호출하는 것이 잘못된 이유는 무엇입니까? – GManNickG
나는 동의한다 ... "swap (c, d)"대신 "c.swap (d)"를 호출하기를 원하는 어떤 진짜 이유가 있는가? 단순히 당신이 이전의 "더 좋아 보인다"고 생각하니? 매크로는 일반적으로 좋은 생각이 아니므로 가능하면 ... "#define BEGIN {"및 "#define END}"을 작성한다는 것을 알면 다음 단계로 넘어 가야합니다. – davr
템플릿을 사용 중이고 c.스왑 (d), 그리고 C는 "int"타입을 가지면, 많은 템플릿 에러 메시지가 손실됩니다. –