gpt4 book ai didi

c++ - 模板元编程 : multiplying a bunch of template arguments

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:03 25 4
gpt4 key购买 nike

我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案:

template<std::size_t n1, std::size_t ...args>
struct mul_all
{
static constexpr std::size_t value = n1 * mul_all<args...>;
};
template<>
struct mul_all<0>
{
static constexpr std::size_t value = 1;
};


问题是每次我必须像这样将 0 提供给模板参数到我的结构中

int main()
{
std::cout << mul_all<1,2,5,4,5,7,0>::value << " "
<< mul_all<4,2,0>::value;
return 0;
}


是否有任何解决方法来读取最后一个零?

注意:我是 TMP 的初学者。

最佳答案

在C++17中,使用折叠表达式,你可以直接做

template<std::size_t ...args>
struct mul_all
{
static constexpr std::size_t value = (args * ...);
};

之前,你必须做偏特化:

template<std::size_t n1, std::size_t ...args>
struct mul_all
{
static constexpr std::size_t value = n1 * mul_all<args...>::value;
};

template<std::size_t n>
struct mul_all<n>
{
static constexpr std::size_t value = n;
};

关于c++ - 模板元编程 : multiplying a bunch of template arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408719/

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