首頁 > 後端開發 > C++ > 如何在不修改原始程式碼的情況下自動將 C 枚舉轉換為字串?

如何在不修改原始程式碼的情況下自動將 C 枚舉轉換為字串?

Susan Sarandon
發布: 2024-12-17 18:51:16
原創
417 人瀏覽過

How to Automatically Convert C   Enums to Strings Without Modifying Source Code?

如何將C 枚舉轉換為字串

使用命名C 列舉時,您可能會遇到將枚舉值轉換為其對應的場景字串表示是必要的。雖然此轉換存在多種方法,但本文解決了有關生成函數的特定查詢,該函數用於將專案中的所有枚舉轉換為字串,而無需修改原始程式碼。

X-Macros:綜合解決方案

建議的方法涉及使用 X 巨集。下面給出了一個範例實作:

#include <iostream>

enum Colours {
#   define X(a) a,
#   include "colours.def"
#   undef X
    ColoursCount
};

char const* const colours_str[] = {
#   define X(a) #a,
#   include "colours.def"
#   undef X
    0
};

std::ostream&amp; operator<<(std::ostream&amp; os, enum Colours c)
{
    if (c >= ColoursCount || c < 0) return os << "???";
    return os << colours_str[c];
}

int main()
{
    std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
}
登入後複製

在colors.def檔案中,定義枚舉如下:

X(Red)
X(Green)
X(Blue)
X(Cyan)
X(Yellow)
X(Magenta)
登入後複製

此方法提供了一種靈活的方式來為所有類型產生轉換函數無需對原始程式碼進行任何修改即可在專案中使用枚舉。

可自訂字串產生

或者,您可以選擇允許自訂產生的字串表示形式的方法。以下程式碼片段說明如何實現此目的:

#define X(a, b) a,
#define X(a, b) b,

X(Red, "red")
X(Green, "green")
// etc.
登入後複製

此方法可以更好地控制生成的字串,並且在您需要對應用程式進行特定自訂時特別有用。

以上是如何在不修改原始程式碼的情況下自動將 C 枚舉轉換為字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板