概括编译时和运行时评估

维托里奥·罗密欧(Vittorio Romeo)

在某些情况下,我可能需要使用相同的行为/代码,并在运行时和编译时使用有时已知的值。这导致代码重复:

template<int TValue> struct CompileTime
{
    int duplicate() { return TValue * 2; }
};

struct RunTime
{
    int value;
    RunTime(int mValue) : value{mValue} { }
    int duplicate() { return value * 2; }
};

int main()
{
    // I need to duplicate a compile-time known value first...
    CompileTime<2>{}.duplicate();

    // And now I need to duplicate a run-time value...
    int value; std::cin >> value;
    RunTime{value}.duplicate();
}

显然,这个例子确实很愚蠢,但是有什么办法可以避免重复我的行为duplicate()(但是,该值需要存储。)

理想情况下,我想写:

int main() 
{
    // 2 is known at compile-time, calls a "templatized" version of `duplicate`
    UnknownTime<2>{}.duplicate(); 

    // `value` is known at run time, calls a "run-time" version of `duplicate`
    int value; std::cin >> value;
    UnknownTime<value>{}.duplicate();
}
尤里·基尔切克

您不能使模板在运行时实例化,但是可以完全放弃模板并使用c ++ 11 constexpr,正是为此目的将其添加到了语言中:

struct AnyTime
{
    int value;
    constexpr AnyTime(int mValue) : value{mValue} { }
    constexpr int duplicate() const { return value * 2; }
};

int main()
{
    constexpr int compileTime = AnyTime{2}.duplicate();

    int value; std::cin >> value;
    int runTime = AnyTime{value}.duplicate();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止运行时评估

来自分类Dev

构造函数中表达式的编译时或运行时评估

来自分类Dev

如何在允许运行时调用的同时保证算法的编译时评估

来自分类Dev

为什么在运行时而不是在编译时评估使用constexpr初始化变量

来自分类Dev

编译/运行时的Java枚举评估

来自分类Dev

允许运行时和编译时多态的灵活方式?

来自分类Dev

在运行时评估groovy字符串表达式

来自分类Dev

内联帮助方法如何以及为何在运行时评估类型?

来自分类Dev

如何使用Datatable的Compute方法在运行时评估布尔表达式?

来自分类Dev

选择多个单元格时评估错误:运行时错误'13':类型不匹配

来自分类Dev

如果条件在调试器/运行时评估为true,但未执行块

来自分类Dev

为什么`to_unsigned(0,4)> = -1`在运行时评估为“ FALSE”?

来自分类Dev

左和右的对象进行评估/运行时或编译时期间解决了吗?

来自分类Dev

运行时错误与编译时错误

来自分类Dev

Gradle的配置编译和运行时

来自分类Dev

在Inno Setup Pascal脚本中,在运行时评估预处理器中的数据集合

来自分类Dev

线性搜索和短路评估(运行时错误)

来自分类Dev

__file和__dirname是在编译时还是在运行时求值的?

来自分类Dev

C ++中运行时和编译时多态之间的区别

来自分类Dev

在C ++中以在编译时和运行时都可用的方式描述像素格式信息

来自分类Dev

隐式浮点转换的编译时和运行时成本

来自分类Dev

Haskell和Idris之间的差异:类型Universe中运行时/编译时的反映

来自分类Dev

制作函数的编译时和运行时版本的最佳方法

来自分类Dev

__file和__dirname是在编译时还是在运行时求值的?

来自分类Dev

编译时和运行时java中类加载器的顺序

来自分类Dev

编译时安全和运行时安全是什么意思?

来自分类Dev

Android APK编译为ART运行时和dalvik运行时

来自分类Dev

使用Dart在运行时/编译时生成类

来自分类Dev

编译时constexpr错误,但运行时无开销

Related 相关文章

  1. 1

    防止运行时评估

  2. 2

    构造函数中表达式的编译时或运行时评估

  3. 3

    如何在允许运行时调用的同时保证算法的编译时评估

  4. 4

    为什么在运行时而不是在编译时评估使用constexpr初始化变量

  5. 5

    编译/运行时的Java枚举评估

  6. 6

    允许运行时和编译时多态的灵活方式?

  7. 7

    在运行时评估groovy字符串表达式

  8. 8

    内联帮助方法如何以及为何在运行时评估类型?

  9. 9

    如何使用Datatable的Compute方法在运行时评估布尔表达式?

  10. 10

    选择多个单元格时评估错误:运行时错误'13':类型不匹配

  11. 11

    如果条件在调试器/运行时评估为true,但未执行块

  12. 12

    为什么`to_unsigned(0,4)> = -1`在运行时评估为“ FALSE”?

  13. 13

    左和右的对象进行评估/运行时或编译时期间解决了吗?

  14. 14

    运行时错误与编译时错误

  15. 15

    Gradle的配置编译和运行时

  16. 16

    在Inno Setup Pascal脚本中,在运行时评估预处理器中的数据集合

  17. 17

    线性搜索和短路评估(运行时错误)

  18. 18

    __file和__dirname是在编译时还是在运行时求值的?

  19. 19

    C ++中运行时和编译时多态之间的区别

  20. 20

    在C ++中以在编译时和运行时都可用的方式描述像素格式信息

  21. 21

    隐式浮点转换的编译时和运行时成本

  22. 22

    Haskell和Idris之间的差异:类型Universe中运行时/编译时的反映

  23. 23

    制作函数的编译时和运行时版本的最佳方法

  24. 24

    __file和__dirname是在编译时还是在运行时求值的?

  25. 25

    编译时和运行时java中类加载器的顺序

  26. 26

    编译时安全和运行时安全是什么意思?

  27. 27

    Android APK编译为ART运行时和dalvik运行时

  28. 28

    使用Dart在运行时/编译时生成类

  29. 29

    编译时constexpr错误,但运行时无开销

热门标签

归档