在运行时使用用户定义的文字[保持中]

问题描述 投票:0回答:2

我正在尝试在运行时使用用户定义的文字。

而不是在编译时对文字进行硬编码,我想在运行时指定值。

我创建了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;
}
c++ c++11 literals
2个回答
1
投票

如果您的问题是弧度和度数之间的区别,则可能要其中之一

  • 带有标签分派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。

主题外:您在构造函数中的参数名称令人困惑。是否接受弧度或度数?您的名字表示度,但您的文字运算符通过弧度。


1
投票

显然,您可以像普通函数一样调用用户定义的文字:

degrees = operator""_deg(angle);
© www.soinside.com 2019 - 2024. All rights reserved.