在 运行 运行 时间使用用户定义的文字
Using user defined literals at run runtime
我正在尝试在运行时使用用户定义的文字。
我不想在编译时对文字进行硬编码,而是想在运行时指定值。
我创建了this,但现在无法进行。
#include <cmath>
#include <iostream>
class Degrees
{
double degree_;
public:
explicit Degrees(long double degree) : degree_(degree) {}
double GetValue() const { return degree_; };
};
Degrees operator "" _deg(long double degree)
{
// Returns radians
return Degrees(degree * 3.14159265358979323846264L / 180);
}
int main(int argc, const char * argv[])
{
long double angle;
std::cin >> angle;
Degrees degrees(angle);
//degrees = 3.1_deg;
std::cout << degrees.GetValue() << "\n";
return 0;
}
显然你可以像普通函数一样调用用户定义的文字:
degrees = operator""_deg(angle);
如果您的问题是弧度和度数之间的区别,您可能需要两者之一
- 两个带有标签分派的构造函数
Degrees(double rad, RadiantTag)
和 Degrees(double deg, DegreeTag)
,或
- 一个构造函数
Degrees(double angle, AngleUnit unit)
其中 enum AngleUnit { Rad, Deg };
,或
- 静态函数
Degrees Degrees::fromDeg(double deg);
和 Degrees Degrees::fromRad(double rad);
并从您的文字运算符中调用其中一个。当然,您可以将文字运算符作为非文字值的普通函数调用,但它们被称为文字是有原因的,imo。
题外话:构造函数中的参数名称令人困惑。它接受弧度或度数吗?你的名字暗示度数,但你的文字运算符传递弧度。
我正在尝试在运行时使用用户定义的文字。
我不想在编译时对文字进行硬编码,而是想在运行时指定值。
我创建了this,但现在无法进行。
#include <cmath>
#include <iostream>
class Degrees
{
double degree_;
public:
explicit Degrees(long double degree) : degree_(degree) {}
double GetValue() const { return degree_; };
};
Degrees operator "" _deg(long double degree)
{
// Returns radians
return Degrees(degree * 3.14159265358979323846264L / 180);
}
int main(int argc, const char * argv[])
{
long double angle;
std::cin >> angle;
Degrees degrees(angle);
//degrees = 3.1_deg;
std::cout << degrees.GetValue() << "\n";
return 0;
}
显然你可以像普通函数一样调用用户定义的文字:
degrees = operator""_deg(angle);
如果您的问题是弧度和度数之间的区别,您可能需要两者之一
- 两个带有标签分派的构造函数
Degrees(double rad, RadiantTag)
和Degrees(double deg, DegreeTag)
,或 - 一个构造函数
Degrees(double angle, AngleUnit unit)
其中enum AngleUnit { Rad, Deg };
,或 - 静态函数
Degrees Degrees::fromDeg(double deg);
和Degrees Degrees::fromRad(double rad);
并从您的文字运算符中调用其中一个。当然,您可以将文字运算符作为非文字值的普通函数调用,但它们被称为文字是有原因的,imo。
题外话:构造函数中的参数名称令人困惑。它接受弧度或度数吗?你的名字暗示度数,但你的文字运算符传递弧度。