В С++ шаблоны создаются с помощью угловых скобок vector<int>
, а языки Java и С# используют тот же синтаксис для своих дженериков.
Создатели D, однако, довольно вокализовали проблемы, которые принесли угловые скобки, и создали новый синтаксис foo!(int)
— но я никогда не видел слишком много деталей о том, какие проблемы прикладывают угловые кронштейны.
Один из них заключался в создании экземпляра шаблона с другим шаблоном vector<vector<int>>
, что заставило бы некоторые (более старые?) компиляторы путать конечные " → " с операторами смены битов или потоками. Решением было вставить пространство между двумя угловыми скобками, но не смогли ли компиляторы разобрать этот синтаксис в настоящее время?
Другая проблема заключалась в использовании оператора большего размера foo<3 > 2>
. Парсер будет думать, что оператор фактически закрывает экземпляр шаблона; исправление заключалось в том, чтобы вводить круглые скобки foo<(3 > 2)>
. Но я не думаю, что есть много случаев, когда вам нужно это делать, и, во всяком случае, мне бы хотелось напечатать дополнительные круглые скобки, когда они нужны, вместо того, чтобы вводить новый синтаксис и всегда вводить восклицательный знак.
Какие еще проблемы существуют с угловыми скобками, которые заставили разработчиков D создать новый синтаксис?