加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 以代数表达式中的数字和单位作为参数的文字

发布时间:2020-12-16 10:37:54 所属栏目:百科 来源:网络整理
导读:如何设计一个可以采用数字和单位的代数表达形式表达的类型,其中Speed是类型,23m / 10s可以是一个表达式? 例: change_speed(Speed s); // better: the meaning of s is specified// ...change_speed(2.3); // error: no unitchange_speed(23m / 10s); // me
如何设计一个可以采用数字和单位的代数表达形式表达的类型,其中Speed是类型,23m / 10s可以是一个表达式?

例:

change_speed(Speed s);    // better: the meaning of s is specified
// ...
change_speed(2.3);        // error: no unit
change_speed(23m / 10s);  // meters per second

编辑这个问题提出了一个问题,即23m形式的文字是否可行.

为了清楚起见,编辑已删除了对源的引用.它可以找到here

解决方法

您需要做的是设计类型,在计算表达式时,它会产生所需的类型.同

change_speed(23m / 10s);

我们需要23m和10s,每种产生一种类型,当你将它们分开时给你一个速度.如果我们有

struct Meter
{
    Meter(double value) : value(value) {}
    double value;
};

struct Second
{
    Second(double value) : value(value) {}
    double value;
}

Speeds operator /(const Meter& m,const Second& s)
{
    return Speed(m.value / s.value);
}

然后我们只需要为Meter和Second定义literal operators就好了

Meter operator "" _m(double value) { return Meter(value); }

Second operator "" _s(double value) { return Second(value); }

我们必须使用_m和_s来生成这些有效的用户定义文字.所有不符合标准的字面都必须以_开头.

然后

change_speed(23_m / 10_s)

change_speed(Meter(23) / Second(10))

变成了

change_speed(Speed(2.3))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读