我正在寫一個簡單的轉換程序,我想創造一些與此類似:有沒有辦法爲非整數創建枚舉數據類型?
//Ratios of a meter
enum Unit_Type
{
CENTIMETER = 0.01, //only integers allowed
METER = 1,
KILOMETER = 1000
};
有一個簡單的數據結構,讓我來組織這樣的數據?
我正在寫一個簡單的轉換程序,我想創造一些與此類似:有沒有辦法爲非整數創建枚舉數據類型?
//Ratios of a meter
enum Unit_Type
{
CENTIMETER = 0.01, //only integers allowed
METER = 1,
KILOMETER = 1000
};
有一個簡單的數據結構,讓我來組織這樣的數據?
不是真的。雖然C++ 11引入了一些really neat new things for enums,例如特別是能夠爲它們分配一些特定的內部數據類型(如char
),無法添加浮點數或任何其他非整數類型。
取決於你實際上試圖做的,我會用一些普通的老式結構此:
struct UnitInfo {
const char *name;
float ratio;
};
UnitInfo units[] = {
{"centimeter", 0.01f},
{"meter", 1},
{"kilometer", 1000},
{0, 0} // special "terminator"
};
然後,您就可以使用迭代的指針作爲在所有可用的單位迭代器:
float in;
std::cout << "Length in meters: ";
std::cin >> in;
// Iterate over all available units
for (UnitInfo *p = units; *p; ++p) {
// Use the unit information:
// p[0] is the unit name
// p[1] is the conversion ratio
std::cout << (in/p[1]) << " " << p[0] << std::endl;
}
如果這是關於使用這些比例與實際值加在一起(如100 * CENTIMETER
),那麼C++ 11的user-defined literals可能是你的東西:
constexpr float operator"" _cm(float units) {
return units * .01f;
}
這然後可以使用這樣的:
float distance = 150_cm;
有一個簡單的數據結構...
並不是這麼簡單,你想與Unit_Type
做什麼。您當然可以創建一個Units_Of_Distance
類和一些const
實例,稱爲centimetre
,metre
,kilometre
等 - 將您的號碼傳遞給構造函數。
如果你不喜歡從頭開始編寫類似的東西,或者想更強大的東西,Kerrek和Angew的評論是好引線....
既然你已經嘗試寫可讀的程序(這是值得稱道的),爲什麼不走一路和使用['的std :: ratio'] (http://en.cppreference.com/w/cpp/numeric/ratio/ratio)用於無量綱比率和用於維度的單獨單位系統? – 2014-10-22 08:24:13
@KerrekSB別忘了[Boost.Units](http://www.boost.org/doc/libs/1_56_0/doc/html/boost_units.html)。 – Angew 2014-10-22 08:25:04
@Mario對不起復制/粘貼:)這是正確的:http://stackoverflow.com/questions/19408305/c-floating-point-enum – manlio 2014-10-22 08:52:59