gpt4 book ai didi

c++ - C++ 模板可以用于条件代码包含吗?

转载 作者:太空狗 更新时间:2023-10-29 20:55:03 25 4
gpt4 key购买 nike

这样:

template <bool Mode>
void doIt()
{
//many lines
template_if(Mode)
{
doSomething(); // and not waste resources on if
}
//many other lines
}

我知道有 enable_if 命令可以用于有条件地启用该功能,但我不认为我可以在这里使用它这样的选项。本质上,我需要的是充当 #ifdef 宏的模板构造。

最佳答案

在尝试复杂的事情之前,通常值得检查简单的解决方案是否已经达到您想要的效果。

我能想到的最简单的事情就是使用if:

#include <iostream>

void doSomething()
{
std::cout << "doing it!" << std::endl;
}

template <bool Mode>
void doIt()
{
//many lines
if(Mode)
{
doSomething(); // and not waste resources on if
}
//many other lines
}

void dont()
{
doIt<false>();
}

void actuallyDoIt()
{
doIt<true>();
}

那么这给出了什么:

gcc 5.3 with no optimizations启用给出:

void doIt<false>():
pushq %rbp
movq %rsp, %rbp
nop
popq %rbp
ret
void doIt<true>():
pushq %rbp
movq %rsp, %rbp
call doSomething()
nop
popq %rbp
ret

请注意,在 false 情况下,没有 doSomething() 调用只是 doIt 函数调用的基本工作。打开优化甚至可以消除这种情况。所以我们已经得到了我们想要的,并且没有在 if 中浪费任何东西。与其添加任何不必要的复杂性,不如就此打住可能更好。

关于c++ - C++ 模板可以用于条件代码包含吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37048624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com