В c ++, когда я часто использую многоуровневый указатель, это хороший способ использовать typedef, чтобы упростить его? - PullRequest
1 голос
/ 27 апреля 2011

В c ++, когда я часто использую многоуровневый указатель, это хороший способ использовать typedef, чтобы упростить его?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Да, хорошей практикой может быть повышение читабельности кода.

Допустим, у вас есть:

class Foo
{
  public:
    Foo(const myotherlib::x509::certificate& cert);

  private:

    myotherlib::x509::certificate m_cert;
}

Хорошей идеей будет немного напечатать вещи:

class Foo
{
  public:

    typedef myotherlib::x509::certificate cert_type;

    Foo(const cert_type& cert);

  private:

    cert_type m_cert;
}

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

И чтобы ответить более полно, то же правило может применяться к «многоуровневым» указателям: если вы действительно пишете Foo*** повсюду, это может быть хорошей идеей, чтобы сделать вещи более читабельными, и typedef хороший инструмент для этого.

Если однажды вы решите заменить свой Foo*** классом с такой же семантикой, изменение будет тривиальным не только в вашем коде, но и в любом клиентском коде, который также использует ваш.

2 голосов
/ 27 апреля 2011

Да, это всегда хорошая идея иметь typedef. Например,

typedef int* intp;
typedef int** intpp;

Теперь, если ваш код действительно организован, то вы можете просто изменить typedef, чтобы использовать свой собственный или любой другой умный указатель. например,

typedef auto_ptr<int> intp;

Это может быть хорошим способом отладки.

...