相关疑难解决方法(0)

如何根据模板参数有条件地声明局部变量?

我想根据模板 bool 参数有条件地在函数中声明局部变量。因此,如果这是真的,它应该在那里,否则不应该在那里,因为我不希望该变量在堆栈上分配内存或调用其构造函数。它也可以是基本类型。

我无法在 constexpr if 块中声明它,因为我需要用法之间的持久性。

  1. 我可以声明变量并添加[[maybe_unused]]. 那么,是否有编译器优化保证不为变量分配内存呢?

    template <bool T> void foo()
    {
        [[maybe_unused]] SomeLargeClass x;
        if constexpr(T)
        {
            /* ... do something with x */
        }
        /* ... do something without x */
        if constexpr(T)
        {
            /* ... do something more with x */
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我尝试将声明替换为

    std::enable_if_t<T, SomeLargeClass> x;
    
    Run Code Online (Sandbox Code Playgroud)

    但它不起作用,因为T==false案例无法提供类型。为什么这不是SFINAE?

  3. 我还有其他选择吗?

c++ local-variables enable-if

7
推荐指数
2
解决办法
1250
查看次数

标签 统计

c++ ×1

enable-if ×1

local-variables ×1