C++ に __CLASS__ マクロはありますか? 質問する

C++ に __CLASS__ マクロはありますか? 質問する

__CLASS__C++には関数名を与える__FUNCTION__マクロに似たクラス名を与えるマクロがありますか?

ベストアンサー1

使用する場合の問題は、静的メソッド呼び出しにポインターtypeid(*this).name()がないことですthis。マクロは、__PRETTY_FUNCTION__静的関数とメソッド呼び出しでクラス名を報告します。ただし、これは gcc でのみ機能します。

マクロ スタイルのインターフェイスを通じて情報を抽出する例を次に示します。

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__)

マクロは、返される値から戻り値の型、修飾子、および引数を取り除いた__METHOD_NAME__形式の文字列を返します。<class>::<method>()__PRETTY_FUNCTION__

クラス名だけを抽出するものについては、クラスが存在しない状況をトラップするために注意する必要があります。

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__)

おすすめ記事