一个最简单的示例是这个类:
class Chain {
public:
Chain(std::string name, std::vector<int> args)
{
assert(true);
}
Chain(std::string name, bool flag)
{
assert(false);
}
};
使用方式如下:
int main() {
auto ch = Chain("name", {});
return 1;
}
Chain
的第二个构造函数之前没有bool flag
,我不得不添加它,现在代码Chain("name", {})
调用第二个构造函数(之前调用的是第一个构造函数)。我想改变第二个构造函数的参数顺序。
Chain(bool flag, std::string name)
{
assert(false);
}
即使这样做,它更倾向于将const char *
转换为bool
,并将{}
转换为std::string
,然后调用第一个构造函数。
有没有一种方法可以禁止它/强制使用调用第一个构造函数?
Chain parse_from_string(string, bool)
,这在整个程序上下文中甚至更有意义,但我还是很好奇是否还有其他方法。 - sejvlondenum class
代替bool
怎么样?这甚至可以让它的含义更加明显(true是什么意思?false是什么意思?ChainFlag::DoThat
更好)。 - firda