gpt4 book ai didi

C++:设计包含多个容器的类的接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:50 24 4
gpt4 key购买 nike

我找不到任何相关内容,但很抱歉,如果已经有人问过这个问题。有时我发现自己处于一个类中,其中包含内部说两个不同的容器。类似于以下内容:

class Foo
{
public:
typedef std::vector<int> int_list;
typedef std::vector<X> x_list;

// It would be nice if the user could iterate through these etc. so that I
// could define functions that operate on them as non-member non-friends.

typedef int_list::size_type int_list_size_type;
typedef int_list::const_iterator int_list_const_iter;

typedef x_list::size_type x_list_size_type;
typedef x_list::const_iterator x_list_const_iter;

int_list_const_iter int_list begin() const { return ints_.begin(); }
x_list_const_iter begin() const { return xs_.begin(); }

int_list::size_type size_of_ints() const { return ints_.size(); }
x_list::size_type size_of_xs() const { return xs_.size(); }

// And so forth ... !

private:
int_list ints_;
x_list xs_;
};

不知怎的,我感到不安。这是做我正在做的事情的聪明方法吗?基本上,对于每个容器,我都需要 typedef 和(const 重载)begin 和 end 方法等。我很好奇:您设计接口(interface)、命名 typedef 等的方式是什么?我想我主要担心的是接口(interface)和方法的爆炸式增长,它看起来也有点丑。

也许限制开始/结束方法数量的一种方法是使用某种标签的基于模板的方法,但我不确定这是否明智。

谢谢!

最佳答案

听起来你的类(class)做得太多了。如果您的客户需要在这些容器上执行所有这些类型的操作,那么最好只公开对容器本身的常量引用,而不是尝试自己包装每个 STL 接口(interface)。

另一方面,如果您的客户需要做所有这些事情,这可能表明该类需要拆分成更小的类。

关于C++:设计包含多个容器的类的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361867/

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