Использование одного и того же оператора с разными параметрами - PullRequest
0 голосов
/ 01 сентября 2011

Я рассматриваю тип "карты карт" и задаюсь вопросом, будет ли считаться плохой практикой иметь два operator[] с разными параметрами, имеющими разное значение.Предположим, что «внешняя» карта проиндексирована OuterKeyType, а внутренние карты - InnerKeyType, и у нас есть объект «карты карт» m.Тогда поведение будет таким, что m[OuterKeyType] будет возвращать (ссылка на) всю внутреннюю карту, проиндексированную этим ключом, в то время как m[InnerKeyType] будет возвращать соединение, образованное некоторой операцией, для всех карт на проиндексированном элементе (можно предположить,все карты имеют одинаковый набор ключей).

Итак, этот дизайн нелогичен и плох, или он просто удобен и потому хорош?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Во-первых, это действительно плохая идея - вообще скрывать различные поведения под одним и тем же именем функции только через передаваемые операнды. Трудно определить, какая логика будет срабатывать при встрече с obj[value], поскольку она будет иметь совершенно другое поведение в зависимости от того, что такое value, которое может быть или не быть видимым при чтении этого кода.

Я бы порекомендовал вам предоставить именованные функции для операций, просто потому, что вы можете перегрузить оператор, это не означает, что вы должны . В зависимости от домена функции могут иметь разные имена: obj.getX(value) и obj.getY(value) гораздо проще понять при условии, что X и Y являются разумными именами.

0 голосов
/ 01 сентября 2011

Как говорится в учебнике , вам не следует перегружать operator [], а operator (). Это более безопасно, быстрее и проще для C ++, чем оператор C "array of array".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...