Есть ли в C ++ 17 статическое отражение? - PullRequest
2 голосов
/ 01 октября 2019

Сочетая if constexpr с некоторыми <type_traits> сущностями, в C ++ 17 я могу проверять типы во время компиляции. Можно ли считать эти методы статическим отражением? Или это просто проверка типа? Пример:

if constexpr (std::is_same_v<T, U>) statement

Применяется ли концепция отражения только к среде выполнения? Правильно ли называть это статическим отражением?

Ответы [ 2 ]

3 голосов
/ 01 октября 2019

Может ли is_same рассматриваться как форма статического отражения? На самом деле это статическое, определяемое во время компиляции свойство типа. И вы можете написать код, который будет выполняться на основе анализа этого свойства. Технически, вполне допустимо называть это «отражением».

Но если вы собираетесь быть полезными со словами, если вы хотите эффективно использовать слова для общения, тогда вы должны распознать эти словарные определения. не совсем полезны. Это потому, что у людей есть разные словари, разные ожидания того, что означают слова. И слова могут менять свое значение или иметь особое значение в разных контекстах. Поэтому, если вы собираетесь эффективно общаться с людьми, вы должны использовать слова, которые фактически передадут значение, которое вы намереваетесь общаться.

В частности, слова «статическое отражение» в контексте C ++ обычнообратитесь к функциональности, относящейся к этому предложению (PDF) (умно названному "Статическое отражение") и его много, много ревизий . В частности, если вы утверждаете, что C ++ имеет «статическое отражение» в качестве некоторой языковой функции, то для многих пользователей C ++ вы заявляете, что пользователи могут делать такие вещи, как перечислять свойства класса (например, подобъекты-члены-членывведите) и выполните итерацию по ним, выполняя некоторые действия над каждым таким свойством.

В конце концов, это то, что вы можете делать в других языках, которые предлагают отражение как первоклассную функцию. «Отражение» - это не , а просто возможность спросить, является ли данный тип конкретным типом или данный тип удовлетворяет базовому свойству. Reflection - это способность анализировать практически все аспекты типа.

Это ожидание того, что термин "статическое отражение" дает многим программистам C ++. Когда программисты C ++ говорят о том, что им нужно «статическое отражение», , то, что они говорят, что они хотят, - .

Итак, хотя вы можете технически утверждать, что C ++ уже имеет «статическое отражение», это не полезно для предъявления такой претензии.

1 голос
/ 01 октября 2019

Я бы сказал, что да, основная идея, что отражение может быть сделано во время компиляции (давая статическое отражение), вполне разумна. Фактически, некоторое время было много статей о статическом отражении в C ++. В качестве одного очевидного примера рассмотрим N3996: статическое отражение .

На самом деле в комитете C ++ есть официальная исследовательская комиссия (ИК 7), которая в настоящее время занимается программированием во время компиляции в целом, ноПервоначально он был посвящен статическому отражению.

Теперь о том, квалифицируется ли static if с некоторыми типовыми чертами как статическое отражение, я бы сказал, что ответ «да», но с некоторыми довольно тяжелыми оговорками, или, по крайней мере,ограничения. Например, static if с чертами типа, вероятно, недостаточно для реализации любого из мотивирующих примеров, показанных в статье, приведенной выше.

Тем не менее, он допускает некоторую минимальную степень отражения, и это было сделаново время компиляции, так что это явно статическое отражение.

...