c++ - 如何为一对中的第一个提供默认值?

标签 c++ constructor default std-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::对构造函数?

最佳答案

您不能轻易地将自己的构造函数添加到 std::pair(从中继承并不是一个真正的选择)。

但是你可以提供一个小函数来构造它并相应地重载它:

Nomnom nomnom(const std::string& s) { return Nomnom(-1, s); }
Nomnom nomnom(int i) { return Nomnom(i, ""); }

您还可以重载 DoItDoItAgain 并在通用实现上转发。

void DoIt(const Nomnom& n) { /* ... */ }
void DoIt(int i) { DoIt(Nomnom(i, "")); }

关于c++ - 如何为一对中的第一个提供默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819176/

相关文章:

c++ - 应如何使用 C++11 Regex 从存储在文本文件中的表创建变量?

c++ - 存在导出时导入库不构建

delphi - 如何在Delphi中调用TObjectDictionary的继承构造函数

C程序切换语句

c++ - TBB concurrent_queue 使用示例

c++ - 从记录集或数据库查询填充时,如何跟踪树中的项目?

c++ - 具有类 c++ 的普通构造函数的默认构造函数

c++ - Cpp 中的构造函数和变量声明

c++ - 为什么默认情况下数据实例不为 NULL?

c++ - 声明私有(private)变量的快捷方式