C++ 生成函数的编译时和运行时版本的最佳方法

C++ 生成函数的编译时和运行时版本的最佳方法,c++,templates,runtime,compile-time,C++,Templates,Runtime,Compile Time,我有一个将由编译时和运行时函数调用的函数(gtest和pythonctypes)。我需要一个模板版本和一个模板变量作为函数参数。比如说 template<int A, int B, int C> void function_compiletime(int a, int b, int c) { // code section 1 } void function_runtime(int a, int b, int c, int A, int B, int C) { //

我有一个将由编译时和运行时函数调用的函数(
gtest
和python
ctypes
)。我需要一个模板版本和一个模板变量作为函数参数。比如说

template<int A, int B, int C>
void function_compiletime(int a, int b, int c) {
    // code section 1
}

void function_runtime(int a, int b, int c, int A, int B, int C) {
    // code section 2
}
模板
空函数_编译时间(int a、int b、int c){
//代码第1节
}
void函数_运行时(inta,intb,intc,inta,intb,intc){
//代码第2节
}
其中
//代码段1
//代码段2
相同。我很小心,可能会意外地更改
//代码部分1
中的某些内容,而不是
//代码部分2
中的内容。如何确保函数的主体是相同的

生成函数的编译时和运行时版本的最佳方法

如何确保函数的主体是相同的

通过定义单个constexpr函数:

constexpr void
function_runtime(int a, int b, int c, int A, int B, int C)
{
    // code section
}
生成函数的编译时和运行时版本的最佳方法

如何确保函数的主体是相同的

通过定义单个constexpr函数:

constexpr void
function_runtime(int a, int b, int c, int A, int B, int C)
{
    // code section
}

让第一个函数调用第二个函数,使用所有六个参数,并且完全不做其他任何事情?第一个函数不是在编译时执行的,它只有几个编译时参数。@SamVarshavchik失去编译时优化我只会将整件事变成一个内联函数,并信任编译器来优化。如果我向编译器提供了优化代码所需的所有信息,那么我默认依赖编译器来为我优化代码,然后只有在我被证明是错误的情况下才尝试强制输入优化代码。@SamVarshavchik代码部分是高度优化的SIMD函数。我希望编译器能够利用它所能进行的任何积极的优化。让第一个函数调用第二个函数,使用所有六个参数,并且完全不执行其他操作?第一个函数不是在编译时执行的,它只有几个编译时参数。@SamVarshavchik失去了编译时优化我只会将整个过程变成一个内联函数,并信任编译器来优化。如果我向编译器提供了优化代码所需的所有信息,那么我默认依赖编译器来为我优化代码,然后只有在我被证明是错误的情况下才尝试强制输入优化代码。@SamVarshavchik代码部分是高度优化的SIMD函数。我希望编译器能够利用它所能进行的任何积极的优化。考虑到这个函数不接受任何引用,也不返回任何值,它在编译时能做任何有用的事情吗?@AyxanHaqverdili可能不会。我怀疑这是一个过于简化的例子。考虑到这个函数不接受任何引用,也不返回任何值,它在编译时能做任何有用的事情吗?@AyxanHaqverdili可能不会。我怀疑这是一个过于简化的例子。