我在我的代码重载函数与类型签名:消除歧义列表初始化的std ::矢量<std::string>
void foo(std::string);
void foo(std::vector<std::string>);
我想foo的用户能够与一个字符串调用或串
//Use case 1
foo("str");
//Use case 2
foo({"str1","str2","str3"});
foo({"str1","str2","str3","str4"});
的问题列表是当调用者传递串到foo的初始化列表。
//Problem!
foo({"str1","str2"});
这个对foo的调用是不明确的,因为它匹配两个类型签名。 这是因为显然{"str1","str2"}
是std::string
所以我的问题是有效的构造函数有什么我可以在声明中或实施富这样的,我保持我上述没有碰到这种模棱两可的构造情况下,API的事情。
我不想定义我自己的字符串类,但是我可以定义别的东西而不是vector<string>
,只要它可以用字符串的初始化列表初始化即可。
只是出于好奇,为什么字符串构造函数接受{"str1","str2"}
?
伟大的这正是我一直在寻找!谢谢。 – Ross