где вы определяете typedef для сложных карт? - PullRequest
1 голос
/ 20 июля 2009

Общий вопрос: где обычно определяется класс, пространство имен.

Мой случай:

Я использую только эти карты в своей реализации класса:

std::map<const std::pair<string, string>,const string*>

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

Ответы [ 3 ]

12 голосов
/ 20 июля 2009

Если это только в вашем классе, я обычно помещаю его в верхнюю часть частного раздела:

class Foo
{
public:
    void some_functions(void);

private:
    typedef std::pair<std::string, std::string> StringPair;
    typedef std::map<StringPair, std::string> StringPairMap;

    StringPairMap _stringMap;
}

Чтобы уточнить, как и для большинства вещей, вы хотите указать эти вещи как можно более локальными. Переменные должны делать это: вы не определяете int i для вашего цикла for, пока не достигнете цикла и т. Д.

Аналогично, если ваш класс использует эти typedef для внутреннего использования, делайте то, что я сказал выше. Если для определения типа нужна только определенная функция в вашем классе, поместите определение типа в начало этой функции.

Если вам нужно предоставить эту typedef клиентам класса, я бы хотел разместить typedef в верхней части раздела public.

1 голос
/ 20 июля 2009

Положите его там, где вы его используете. Если вы используете его в закрытом разделе заголовочного файла, объявите там typedef. Если вы используете его только в коде реализации в файле .cpp, объявите там typedef.

0 голосов
/ 21 июля 2009

Зависит от того, нужен ли вам этот тип как в общедоступном интерфейсе к классу? Если так, то я объявил бы это в публичной части класса. Если вы используете его только в приватной части класса, объявите его там. И если вы используете его только в реализации, объявите его там. В общем случае никогда не объявляйте его в глобальном пространстве имен в заголовочном файле (или, если вы действительно ставите перед именем префикс с тем, что не будет конфликтовать).

Основное правило здесь - сделать замедление видимым / доступным для как можно меньшего подмножества вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...