SORU
3 Kasım 2009, Salı


__SINIF__ C makro var mı ?

Yok sınıf adını veren C __CLASS__ makro __FUNCTION__ benzer bir işlev adını veren bir makro

CEVAP
2 NİSAN 2013, Salı


typeid(*this).name() kullanarak sorunu statik bir yöntem çağrısı this işaretçi yok. Makro __PRETTY_FUNCTION__ statik fonksiyonları gibi yöntem çağrıları bir sınıf adı bildiriyor. Ancak, bu sadece gcc ile çalışacak.

İşte makro tarzı bir arabirim yoluyla bilgi çıkarmanın bir örnek.

inline std::string methodName(const std::string& prettyFunction)
{
    size_t colons = prettyFunction.find("::");
    size_t begin = prettyFunction.substr(0,colons).rfind(" ")   1;
    size_t end = prettyFunction.rfind("(") - begin;

    return prettyFunction.substr(begin,end)   "()";
}

#define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)

8* *makro <class>::<method>(), dönüş türü kırparak değiştiriciler formun bir dize ve __PRETTY_FUNCTION__ sana verdiği iddialarını geri dönecek.

Sadece sınıf ismi özler olan bir şey için, bazı bakım sınıfı diye bir şey yok burada tuzak durumlar için alınması gerekir:

inline std::string className(const std::string& prettyFunction)
{
    size_t colons = prettyFunction.find("::");
    if (colons == std::string::npos)
        return "::";
    size_t begin = prettyFunction.substr(0,colons).rfind(" ")   1;
    size_t end = colons - begin;

    return prettyFunction.substr(begin,end);
}

#define __CLASS_NAME__ className(__PRETTY_FUNCTION__)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • ShoSho

    ShoSho

    20 Ocak 2010
  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006