概括编译时间和运行时间评估
Generalizing compile-time and run-time evaluation
在某些情况下,我可能需要使用相同的行为/代码,其中有时在运行时和编译时已知。这导致代码重复:
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();
}
在duplicate
这样的情况下,您可以使用函数而不是类或结构:
template<int TValue>
int duplicate()
{
return TValue * 2;
}
int duplicate(int value)
{
return value * 2;
}
现在您可以说:
int main()
{
// 2 is known at compile-time, calls a "templatized" version of `duplicate`
int value1 = duplicate<2>();
// `value` is known at run time, calls a "run-time" version of `duplicate`
int value; std::cin >> value;
int value2 = duplicate(value);
}
相关文章:
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- C 获得运行时间和内存使用量
- C DO插座关闭自己的运行时间
- 概括编译时间和运行时间评估