-3
我喜歡使用枚舉類來儘可能避免硬編碼值,但對於字符串來說它有點複雜。我有一個我想要分享的設計,我覺得它有點笨重,我很想談談如何簡化它。如何在C++中創建一個類型安全的字符串「定義」對象?
class StringDefinition
{
private:
StringDefinition(const std::string &def);
public:
bool operator==(const StringDefinition&rhs) const;
public:
static const StringDefinition StringDefinitionOne;
static const StringDefinition StringDefinitionTwo;
static const StringDefinition StringDefinitionThree;
public:
std::string ToString() const;
private:
string stringDef;
};
StringDefinition::StringDefinition(const std::string &stringDef)
{
this->stringDef = stringDef;
}
const StringDefinition StringDefinition::StringDefinitionOne("One");
etc...
歡迎任何意見和建議。
編輯:我沒有使用字符串文字,因爲它不強制開發人員使用定義列表中的值。即使你希望他們使用你的字符串,他們仍然可以硬編碼一個字符串。如果我在做一些瘋狂的事情,我會喜歡一些建設性的批評,而不是僅僅投票回答問題。
這是什麼導致只是一個命名的全局字符串文字? – Borgleader
我不想僅僅使用const字符串創建對象,因爲那樣的話字符串就是字符串。任何人仍然可以硬編碼一個字符串。假設我創建了一個方法,並且我想傳入一個StringDefinition,我可以這樣做。如果我使用字符串文字,某人可以傳遞一個硬編碼的字符串 – Pittfall
std :: tuple'也許? –