Я пытаюсь реализовать семантику ключевого слова D-языка inout
на C++ (просто для удовольствия).Автоматическая генерация перегрузки const для функции-члена
В зависимости от контекста, она по существу говорит одна из двух вещей:
- «Результат этой функции будет иметь ту же константную-ность в качестве одного из своих аргументов.»
- «Результат этой функции-члена будет иметь ту же самую константу, что и экземпляр, на который вы его называете».
Полезно при написании функций-членов, таких как begin
и , среди других случаев.
Я был в состоянии создать обоснованную реализацию первого случая с относительной легкостью (хотя интерфейс уверен, не очень): http://ideone.com/wgaDJJ
Во-вторых, однако, по-видимому, невозможно моим лучшим предположением. Насколько я знаю, вы можете получить такую «автоматическую генерацию перегрузки констант» при использовании шаблонов, но вы не можете создавать шаблоны над этим «аргументом». В частности, вы заметите, что этот код делает не работы/компиляции: http://ideone.com/W4fTa4
Было интересно:
- ли я что-то пропустил? Возможно ли реализовать второй случай, не прибегая к макросам или дублированию кода?
- Кто-нибудь знает, есть ли предложение по стандарту WG21 по этому вопросу? (не обязательно
inout
, просто что-нибудь по теме) - Что такое отраслевой стандарт для решения этой проблемы? (Вот, возможно, не так страшно вариант я играл с: http://ideone.com/PW0vK4)
IMO - это промышленный стандарт для тиражирования функции, вызовите const из неконстантных и просто const_cast проблем. И это просто сломано и никоим образом не приемлемо. Необходим языковой механизм. –
Для метода вам нужно явно добавить 'const' для' this', тогда как для аргумента константа может быть выведена в шаблоне. – Jarod42