所以,我有一個宏。是否可以使用宏來專門化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 2009-07-17 23:47:49
我同意...有沒有真正的理由想要調用「swap(c,d)」而不是「c.swap(d)」?是不是你認爲前者「看起來更好」?宏通常是一個糟糕的主意,如果可能的話,你應該避免它們......接下來你會知道你會寫下「#define BEGIN {」和「#define END}」,並且從那裏開始都是下坡。 – davr 2009-07-18 00:56:58