作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案:
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/
我是一名优秀的程序员,十分优秀!