С ++ 20? модули — нет вывоза рядовых

Смотрел 2 выступления CppCon Габриэля Дос Рейса о модулях TS.

И, насколько я помню, он не хотел экспортировать какие-либо частные элементы / функции, поэтому другие модули не смогут их использовать вообще.

Я понимаю его позицию, но не будет ли это противоречить будущему отражению в C ++? Например, когда в C ++ есть отражение, которое может перечислять все функции класса, разве он не может также перечислять частные функции?

Я знаю, доступ к закрытым функциям плох, но в редких крайних случаях это необходимо (как иногда необходим const_cast, несмотря на то, что разработчик, который пишет, должен чувствовать себя ужасно)

Редактировать:

И есть по крайней мере одно исключение для «не разоблачения рядовых» — если классы используют шаблон «не виртуальный интерфейс»

1

Решение

Модули не изменяют (как определено в настоящее время) принципы работы C ++ на фундаментальном уровне. Это несколько меняет то, какие имена доступны и откуда они доступны. Но это не меняет того, как язык работает с этими именами.

Таким образом, если статическое отражение приходит и позволяет вам говорить о частных членах класса, то вы можете говорить о частных членах класса. Пришло ли вам определение этого класса через директиву #include или включение модуля — не имеет значения.

Чтобы разрешить то, что хочет Габриэль Дос Рейс, потребуется явное исключение из правил отражения. И это вряд ли произойдет.

И это не так уж важно. Хотя возможность удаления из файлов модулей приватных членов (и любых неэкспортированных типов, с которыми они работают) сделает файлы модулей немного меньше, я не думаю, что этот дополнительный размер файла модуля будет таким большим делом. Главное, что это позволит вам сделать, — это внести определенные изменения в исходный код модуля, которые не потребуют перекомпиляции модулей, включающих ваш модуль. Но в любом случае хорошо модульная кодовая база должна иметь относительно быструю компиляцию. Так что, хотя это было бы хорошо, это вряд ли необходимо.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]