【发布时间】:2014-04-02 17:50:20
【问题描述】:
我使用的是pair类型:
typedef std::pair<int, std::string> Nomnom;
它的使用示例:
void DoIt(const Nomnom &toNom) {
...
}
void DoItAgain(const Nomnom &toNomAgain) {
...
}
在我的情况下,如果未指定,则为该对提供默认值是有意义的。也就是说,我希望能够做到这一点:
DoIt("Thisisit");
DoItAgain("Thisisit");
让它等同于这个:
DoIt(NomNom(0, "Thisisit"));
DoItAgain(NomNom(0, "Thisisit"));
我想在每次使用 Nomnom 时不定义两个变体。
除了为 Nomnom 定义一个类而不是 typedef,提供一个单参数构造函数,然后提供调用 std::pair 构造函数的零参数和双参数构造函数之外,有什么方法可以实现这一点?
【问题讨论】:
-
是的,它被称为重载。您可以同时拥有
ClassNoms(Nomnom oneIn)和ClassNoms(int key)。 -
取决于您可以应用的
int的合理默认值,不是吗?在这种情况下,您可以使用默认构造函数ClassNoms() : one(std::make_pair(-1,"")轻松下车。还是我只是错过了您的要求? -
抱歉,不清楚。我想要
Nomnom的默认构造函数,而不是ClassNoms的默认构造函数。请注意,DoIt采用Nomnom,而不是ClassNoms。我会修复示例。 -
你不能轻易添加自己的构造函数来做一个现有的
std类(继承很麻烦)。您可以做的是为DoIt和DoItAgain提供重载。
标签: c++ constructor default std-pair