我需要在編譯時計算一串數字的乘積傳遞給模板化結構。我成功作出醜陋解決方案: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