Как вызвать статический метод C ++

Я просто использовал следующее:

import unicodedata
message = unicodedata.normalize("NFKD", message)

Проверьте, что в документации говорится об этом:

unicodedata.normalize (form, unistr) Возвращает форму нормальной формы для Unistode string unistr. Допустимыми значениями для формы являются «NFC», «NFKC», «NFD» и «NFKD».

Стандарт Unicode определяет различные формы нормализации строки Unicode на основе определения канонической эквивалентности и совместимости эквивалентность. В Unicode несколько символов могут быть выражены различными способами. Например, символ U + 00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) также может быть выражен как последовательность U + 0043 (LATIN CAPITAL LETTER C) U + 0327 (КОМБИНИРОВАНИЕ CEDILLA).

Для каждого символа , существуют две нормальные формы: нормальная форма C и нормальная форма D. Нормальная форма D (NFD) также известна как каноническое разложение и переводит каждый символ в его разложенную форму. Нормальная форма C (NFC) сначала применяет каноническое разложение, а затем снова складывает предварительно комбинированные символы.

В дополнение к этим двум формам существуют две дополнительные нормальные формы, основанные на эквивалентности эквивалентности. В Unicode поддерживаются определенные символы, которые обычно объединяются с другими символами. Например, U + 2160 (ROMAN NUMERAL ONE) на самом деле то же самое, что и U + 0049 (LATIN CAPITAL LETTER I). Тем не менее, он поддерживается в Unicode для совместимости с существующими наборами символов (например, gb2312).

Нормальная форма KD (NFKD) применит декомпозицию совместимости, то есть заменит все символы совместимости на их эквиваленты. Нормальная форма KC (NFKC) сначала применяет декомпозицию совместимости, за которой следует каноническая композиция.

Даже если две строки Юникода нормированы и выглядят одинаково для читателя человека, если у вас есть сочетание символов, а другое не может сравниться с равными.

Решает его для меня. Простой и легкий.

29
задан Cœur 16 December 2018 в 05:55
поделиться

5 ответов

Используйте :: вместо .

MyObject o = MyMath::calcSomething();

Когда вы вызываете метод без объекта класса, вы должны использовать нотацию ::. Вы также можете вызывать статический метод через объекты класса или указатели на них, в этом случае вам следует использовать обычные обозначения . или ->:

MyObject obj;
MyObject* p = new MyObject();

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
74
ответ дан Paul 16 December 2018 в 05:55
поделиться

Что я делаю не так?

Вы просто используете неправильный синтаксис ... оператор :: ( оператор разрешения области действия ) - это то, что вы бы сделали получить доступ к классам или членам в разных пространствах имен:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax
}

Нужно ли создавать экземпляр MyMath?

Нет.

12
ответ дан John Rasch 16 December 2018 в 05:55
поделиться

Позвоните MyMath::calcSomething()

1
ответ дан Marten 16 December 2018 в 05:55
поделиться

Попробуйте таким образом

#include <iostream>
using namespace std;
class MyMath {  
public:
    static MyMath* calcSomething(void);
private:
};
MyMath* MyMath::calcSomething()
{
    MyMath *myMathObject=new MyMath;
    return myMathObject;
}
int main()
{   
    MyMath *myMathObject=MyMath::calcSomething();
    /////Object created and returned from static function calcSomeThing   
}

Спасибо

1
ответ дан Tunvir Rahman Tusher 16 December 2018 в 05:55
поделиться

Для этого случая вы хотите MyMath :: calcSomething (). "." синтаксис для вызова функций в объектах. Синтаксис :: предназначен для вызова функций в классе или пространстве имен.

1
ответ дан Michael Kohne 16 December 2018 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: