Я пытаюсь реализовать семантику ключевого слова D-языка inout
в С++ (просто для удовольствия).
В зависимости от контекста он, по сути, говорит одну из двух вещей:
- "Результат этой функции будет иметь ту же константу, что и один из ее аргументов".
- "Результат этой функции-члена будет иметь ту же самую константу, что и экземпляр, на который вы его называете".
Полезно при написании функций-членов, таких как begin
и end
, среди других случаев.
Мне удалось создать корректную реализацию первого случая с относительной легкостью (хотя интерфейс уверен, что это не так): http://ideone.com/wgaDJJ
Вторая, однако, кажется невозможной, по моему лучшему предположению. Насколько мне известно, вы можете получить такую "автоматическую генерацию перегрузки по перестройке" при использовании шаблонов, но вы не можете создавать шаблоны по аргументу "this". В частности, вы заметите, что этот код не работает/компилируется: http://ideone.com/W4fTa4
Интересно:
- Я что-то пропустил? Возможно ли реализовать второй случай, не прибегая к макросам или дублированию кода?
- Кто-нибудь знает, есть ли предложение по стандартам WG21 по этому вопросу? (не обязательно
inout
, просто что-нибудь на тему) - Что такое отраслевой стандарт для решения этой проблемы? (Здесь, возможно, не такой ужасный вариант, с которым я играл: http://ideone.com/PW0vK4)