2011-01-19 6 views
3

После популярный код:(точка) доступа к статическому методу

class A 
{ 
public: 
    static const string TYPE = "AEvent"; 
    const string& getType() { return TYPE; } 
}; 

Приведенный выше код может быть использованы как это:

if (aInstance.getType() == A::TYPE) 
{ 
    ... 
} 

Это нормально. Но это не интуиция. Не? Посмотрите на следующий код:

class A 
{ 
public: 
    static const string& getType() 
    { 
     static const string TYPE = "AEvent"; 
     return TYPE; 
    } 
} 
//Usage 
if (aInstance.getType() == A::getType()) 
    .... 

Конечно, GetType статический метод, но можно получить доступ оператора точки, и это более интуитивно видеть меня.

Как вы думаете?

+4

Я не уверен, что вопрос здесь. Вы спрашиваете, что такое лучшая практика? – Maxpm

ответ

2

До тех пор, пока вы возвращаете переменную static из статического метода, все должно быть хорошо. Не имеет значения, звоните ли вы с помощью оператора точки или разрешения. В любом случае это часть объекта, а также класс, который должен дать вам одну и ту же переменную static.

+0

На самом деле, левая сторона не будет оценивать, поэтому вызов через NULL-указатель в порядке. – Joshua

+2

@ Joshua: [Это возможно] (http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in-undefined-behav). – GManNickG

+0

Спасибо @ Dave18, @Joshua. Ты прав. Это даже отлично с помощью указателя NULL !! –

3

Если проще использовать объект obj.static_member (или метод), используйте его; это часто верно, когда имя типа длинное, например, с шаблонами. В противном случае используйте Type :: static_member.