我使用的是对类型:
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::对
构造函数?
最佳答案
您不能轻易地将自己的构造函数添加到 std::pair
(从中继承并不是一个真正的选择)。
但是你可以提供一个小函数来构造它并相应地重载它:
Nomnom nomnom(const std::string& s) { return Nomnom(-1, s); }
Nomnom nomnom(int i) { return Nomnom(i, ""); }
您还可以重载 DoIt
和 DoItAgain
并在通用实现上转发。
void DoIt(const Nomnom& n) { /* ... */ }
void DoIt(int i) { DoIt(Nomnom(i, "")); }
关于c++ - 如何为一对中的第一个提供默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819176/