typedef
s всегда"локально для файла". Так что не совсем понятно, что вы подразумеваете под «превращением его в файл». Typedef не представляет сущность со своей собственной связью, он просто создает псевдоним существующего типа. По этой причине проблема «сделать его локальным для файла» просто не существует. Каждый typedef виден только в той единице перевода (файле), в которой он объявлен. Итак, если вы можете быть уверены, что ваши идентичные имена typedef
никогда не встречаются друг с другом в общем блоке перевода, ваша проблема формально решена.
Это не очень хорошая практика программирования, хотя одно и то же typedef-имя ссылается на разные типы в разных файлах, если только эти файлы не разделены естественным образом (например, принадлежат разным библиотекам или что-то в этом роде).
В противном случае вы всегда можете переименовать один из typedef
или сделать его членом класса или членом пространства имен. Имейте в виду, однако, что в общем случае создание typedef
члена класса потребует практически того же рода усилий, что и его переименование: ссылки на этот typedef
должны будут обновляться в каждом месте, в котором они присутствуют. , Пространства имен могут быть немного проще, поскольку с пространствами имен вы можете использовать директиву using
.
Но, опять же, если ваши typedef
ссылаются только на два непересекающихся набора файлов, то проблема формально не существует. Если есть файлы, которые должны использовать оба typedef
s, то усилия, которые вам придется потратить на исправление этих файлов, будут эквивалентны переименованию typedef
s (независимо от выбранного вами метода).