模板型参数未按要求展开



当我在c++TMP上进行实验时,我注意到模板有多么强大。但在某种程度上,我想知道为什么下面的代码无效,但它使用了可变模板类型扩展(1(。当非类型变量展开工作正常时(2(。求幂没有意义,因为在这两个扩展参数中都不可用。或者是我的编译器出了问题。clang++ std=c++20

  • 测试
    template<typename Y> struct Exp{
    static const bool useless=false;
    };
    template<typename... T> auto initAll1(int forAll,T...ts){
    std::array a={(ts,forAll)...};
    }
    template<typename... T> auto initAll2(int forAll){
    std::array a={(T,forAll)...};
    }
    template<typename... T> auto initAll3(int forAll){
    std::array a={(Exp<T>::useless,forAll)...};
    return a;
    }
    

    我说的是initAll2。它不起作用,我制作了initAll3以避免出现错误。

  • 正如max66的评论所说,选项3可能不会有任何运行时开销。但如果你想要更清洁的东西,你可以这样做:

    template<typename... T>
    auto initAll2(int forAll){
    std::array a={std::conditional_t<true, int, T>{ forAll }...};
    }
    

    相关内容

    • 没有找到相关文章

    最新更新