gpt4 book ai didi

c++ - 如何将 asString()/toString() 添加到 std::vector?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:07 27 4
gpt4 key购买 nike

我的情况如下:有一些类 MyList 稍后可能会得到特定的实现。目前,像 std::vector 这样的行为是可以的。

但是,我确实需要一种简单的方法来对其调用某种 asString()/toString() 方法,因为我将在测试断言、调试输出等中需要它。我看到的唯一选项是:

  1. 公共(public)继承。我永远不会通过基指针删除这样的列表,因为永远不应该有任何基指针。如果我这样做,无论如何都不会有指针成员。但是,经验法则仍然指出:不要从 STL 容器继承。

  2. 某种“全局”(当然,实际上是在命名空间中)方法将 MyList 的实例作为参数并为我执行 asString() 魔法。在这种情况下,MyList 可以是 std::vector 的简单类型定义。

我不太喜欢这两个选项。还有什么我没有想到的吗?或者,如果不是 - 我应该选择哪种方式?

最佳答案

第二种方法有什么问题?这是迄今为止最简单也非常优雅的。-想象一下包装 vector 的替代方案。这会给你带来很多额外的工作和容易出错的胶水代码!我肯定会选择函数方法!

编辑:顺便说一句,我几乎只使用自由函数(有时是静态成员)进行转换。想象一下,您有大量类型需要以某种方式转换为字符串。让 toString() 函数作为自由函数而不是成员函数不会让您感到头疼,因为您基本上可以根据需要简单地重载该函数,而不必触及任何现有类(或者也许您甚至没有源代码访问权限的类)。

然后你可以有这样的功能:

template<class T>
void printDebugInfo(const T & _obj)
{
std::cout<<toString(_obj)<<std::endl;
}

并且您将不会遇到当前的限制。

关于c++ - 如何将 asString()/toString() 添加到 std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com