我试图为此类重载赋值运算符。 如何为包含结构和枚举器的类做到这一点?
class Config
{
public:
Config() { SetDefaults(); }
Config(const std::string& path);
enum FeatureType
{
kFeatureTypeHaar,
kFeatureTypeRaw,
};
enum KernelType
{
kKernelTypeLinear,
kKernelTypeGaussian };
struct FeatureKernelPair
{
FeatureType feature;
KernelType kernel;
std::vector<double> params;
};
bool quietMode;
std::string sequenceBasePath
int frameHeight;
std::vector<FeatureKernelPair> features;
friend std::ostream& operator<< (std::ostream& out, const Config& conf);
private:
void SetDefaults();
static std::string FeatureName(FeatureType f);
static std::string KernelName(KernelType k);
};
这是我尝试过的。这是做到这一点的一般方法,对吧..?
Config & operator=(Config const&c) {
if(this != &c){
quietMode = c.quietMode;
sequenceBasePath = c.sequenceBasePath;
frameHeight = c.frameHeight;
features = c.features;
}
return *this;
}
答案 0 :(得分:0)
这是一种方法(假设您已将运算符定义为成员)。
CoryKramer在评论中提出的复制交换idom肯定是一种更好的方法(只要你们都有一个复制操作符并定义一个交换函数)。
尽管如此,在您的特定情况下,Config
类仅包含已具有复制 - 分配运算符的成员。因此,您不需要提供自己的:编译器生成的默认值将按成员副本组织成员。