Я не смог найти ничего подходящего, но извините, если об этом уже спрашивали.Я иногда оказываюсь в ситуации, в которой у меня есть класс, который содержит, скажем, два разных контейнера.Что-то вроде следующего:
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_;
};
Как-то мне неловко.Это умный способ делать то, что я делаю?По сути, для каждого контейнера мне понадобятся typedefs и (const overload) методы begin и end и т. Д. Мне интересно: как бы вы разработали интерфейс, назвав typedefs и т. Д.?Я думаю, что я в основном беспокоюсь об интерфейсе и взрыве методов, и это выглядит довольно уродливо.
Может быть, одним из способов ограничения числа методов начала / конца был бы подход на основе шаблонов с использованием somekindтегов, но я не уверен, разумно ли это.
Спасибо!