c++ - 专门对中的自定义访问器名称

标签 c++ visual-c++ c++11

<分区>

我想使用 std::pair<bool, std::string> 的等价物作为函数返回类型。在下游代码中使用 ok 会更好看和 msg而不是 firstsecond访问器以避免不必要的 API 查找。而且我似乎无法使用继承将其正确编写为 std::pair没有虚拟析构函数可能会泄漏。想避免我自己的结构作为 Renamed std::pair members 中的解决方案- 重用现有的 Move 构造函数和其他管道。有可能吗?

编辑:

经过反馈好像推荐的做法是:

struct res {
    bool ok;
    std::string msg;
};

res fnk() { ...; return r };

我是否正确理解 C++11 编译器希望生成移动构造函数以避免复制字符串?

最佳答案

Wanted to avoid my own struct as the solution in Renamed std::pair members - to reuse existing Move constructor and other plumbing.

我认为这是误解的根源:如果您编写自己的结构,the compiler will generate the move constructor以及免费为您提供的“其他管道”。

而且任何体面的编译器都应该能够做到copy elision ,即就地构建结果;没有复制,没有移动。

使用命名内联访问器也是一种选择,特别是如果您真的需要使用std::pairRenamed std::pair members 中也有详细说明问题和in one of the answers .

在我看来,在这种情况下进行继承是错误的;我不会那样做。我没有看到它有任何好处,但我确实看到了它的问题。

关于c++ - 专门对中的自定义访问器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19441900/

相关文章:

c++ - 将非静态函数指针传递给另一个类?

c++ opencv网络摄像头流到html

c++ - 如何避免堆分配将 Rendercommands 插入到 RenderCommandBuffer?

c++ - 完美转发对象成员

c++ - 错误 C2027 和错误 C2227

C++ ODBC SQL Server 2008 连接

c++ - 将指针转换为 int 并返回类型化对象

c++ - 在没有特定容器时检查迭代器是否未分配给项目

c++ - 使用 int 进行枚举类初始化

c++ - 为什么 defined(X) 在没有空格的预处理器定义中不起作用?