我需要在编译时计算一串数字的乘积传递给模板化结构。我成功作出丑陋解决方案:template Metaprogramming:乘以一堆模板参数
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;
};
的问题是,每次我都像这样
int main()
{
std::cout << mul_all<1,2,5,4,5,7,0>::value << " "
<< mul_all<4,2,0>::value;
return 0;
}
饲料0到模板参数传递给我的结构是否有任何解决方法来读取最后一个零?
注意:我是TMP的初学者。
只是踢,这里有一个C + +14'constexpr'解决方案,不使用模板递归:http://melpon.org/wandbox/permlink/yNbfyOhiN3hLqmpA – bogdan
很酷!!!有什么方法可以用其他解决方案进行基准测试吗? –
你的意思是编译时间?非递归解决方案应该大致相同,并且优于涉及模板递归的经典解决方案,因为递归解决方案会产生多个模板实例化,这会产生一些成本(实际上,它开始对相对大量的模板参数起作用 - 许多数十个)。然而,C++ 14虚拟数组解决方案仅仅是缺少折叠表达式的一种解决方法;我会选择C++ 17倍表达式。 – bogdan