是否有任何规则禁止在增变器中放置多个参数?
Is there any rule against putting more than one parameter in a mutator?
我需要我的修改器在我的构造函数中调用一个不同的函数,之后随时调用另一个函数,所以我想把一个 bool 作为第二个参数来区分如下:
void SetName(const char* name, bool init)
{
init ? this(name) : that(name);
}
这是否违反惯例?我应该改用两个单独的修改器吗?
它允许您犯错误,而这些错误可以在编译时避免。例如:
Example example;
example.SetName("abc", true); // called outside the constructor, `init == true` anyway
为防止出现这种情况,只需更换您的
struct Example {
Example() { SetName("abc", true); }
void SetName(const char* name, bool init) { init ? foo(name) : bar(name); }
};
和
struct Example {
Example() { foo("abc"); }
void SetName(const char* name) { bar(name); }
};
测试:
Example example; // calls the for-the-constructor version
example.SetName("abc"); // calls the not-for-the-constructor version
example.SetName("abc", true); // obviously, doesn't compile any more
我需要我的修改器在我的构造函数中调用一个不同的函数,之后随时调用另一个函数,所以我想把一个 bool 作为第二个参数来区分如下:
void SetName(const char* name, bool init)
{
init ? this(name) : that(name);
}
这是否违反惯例?我应该改用两个单独的修改器吗?
它允许您犯错误,而这些错误可以在编译时避免。例如:
Example example;
example.SetName("abc", true); // called outside the constructor, `init == true` anyway
为防止出现这种情况,只需更换您的
struct Example {
Example() { SetName("abc", true); }
void SetName(const char* name, bool init) { init ? foo(name) : bar(name); }
};
和
struct Example {
Example() { foo("abc"); }
void SetName(const char* name) { bar(name); }
};
测试:
Example example; // calls the for-the-constructor version
example.SetName("abc"); // calls the not-for-the-constructor version
example.SetName("abc", true); // obviously, doesn't compile any more