Как разместить глобальные функции, которые обращаются к неглобальным классам, в одном месте? - PullRequest
0 голосов
/ 08 февраля 2011

Возможно, я даже не правильно формулирую вопрос, но вот моя ситуация. У меня есть пространство имен, в которое я хочу поместить все свои глобальные функции. Я хочу определить их все в соответствующем файле .cpp. Многие из этих функций обращаются к экземплярам неглобальных классов, которые сами могут быть или не быть членами пространства имен. Я могу заранее объявить классы, но я, конечно, получу ошибки компоновщика, когда попытаюсь вызвать методы класса. Одно (ужасно кажущееся) решение состоит в том, чтобы определить каждый из этих глобалов после соответствующие классы были определены, но это помещает разные функции в разные файлы, и я хочу избежать этого любой ценой, делая это глубоко неправильно.

Что еще я могу сделать? Я думаю, у меня здесь есть концептуальная проблема, какие стратегии дизайна могут помочь решить эту проблему? Должен ли я сделать их статическими членами соответствующих классов? Мне не нравится это, потому что мои классы имеют длинные имена, но мое имя пространства имен короткое ... так что просто используйте typedef? Но с концептуальной точки зрения это глобальные функции, поэтому я бы хотел, чтобы они оставались такими ... Спасибо за ваше внимание.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2011

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

В файле .cpp просто включите заголовки для других «неглобальных» классов и функций по мере необходимости. Это будет поддерживать общедоступный API «чистым» (файл заголовка), в то же время позволяя вам нормально разрабатывать реальный код для этих функций.

1 голос
/ 08 февраля 2011

Как подсказал @Oli Charlesworth, можете ли вы просто #include указать соответствующие заголовки классов в исходном файле глобальных методов?

0 голосов
/ 16 февраля 2011

Я не могу пометить комментарий как ответ, поэтому я просто опубликую его сам - в основном Оли Чарнесворт был прав, решение проблемы - рефакторинг. Был определенный класс, который вызывал мою проблему циклических зависимостей, и я просто переделал вещи так, чтобы они больше не зависели от «глобальной» информации, скорее «глобальная» информация # включала ее.

...