我想撰寫一些使用不同型別貨幣的代碼,例如
struct euro {
int value;
};
struct dollar {
int value;
};
現在我想使用歐元和美元登錄代碼,比如
euro e = 3€;
dollar d = 3$;
這有可能嗎?
uj5u.com熱心網友回復:
您需要的是用戶定義的 Lietrals。下面的代碼對我g 11.1.0
有用,但我想非 ASCII € 可能存在一些問題。也許嘗試使用EUR
后綴?對于負值,請參閱此。
#include <charconv>
#include <cstring>
#include <iostream>
struct euro
{
unsigned long long val;
};
euro operator"" _€ (unsigned long long num)
{
return euro {num};
}
int main()
{
euro e = 123_€;
std::cout << e.val << '\n';
}
uj5u.com熱心網友回復:
您可以使用用戶定義的文字來接近此語法:請注意,并非所有編譯器都接受特殊字符,但我的 MSVC 接受。當然,您可以創建一個貨幣類別并根據匯率進行某種轉換,但這取決于您:)
#include <iostream>
struct dollars_t
{
double value;
};
struct rupees_t
{
double value;
};
constexpr dollars_t operator "" _$(long double value)
{
return dollars_t{ static_cast<double>(value) };
};
constexpr rupees_t operator "" _?(long double value)
{
return rupees_t{ static_cast<double>(value) };
};
int main()
{
auto dollars = 10.12_$;
auto rupees = 1000.12_?;
std::cout << "You have " << dollars.value << " dollars\n";
std::cout << "And you have " << rupees.value << " rupees\n";
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388767.html
上一篇:C 完美轉發功能