我有這樣的代碼如何使用元編程過濾常量類型和非常量類型?
#include <iostream>
size_t F()
{
return 0;
}
template <class Type, class... NextTypes>
size_t F(const Type& type, const NextTypes&... nextTypes)
{
if (!std::is_const<Type>::value)
return sizeof(type) + F(nextTypes...);
else
return F(nextTypes...);
}
int main()
{
int a = 0;
const int b = 0;
const size_t size = F(a,b);
std::cout << "size = " << size << std::endl;
return 0;
}
我想在編譯時間知道的常量參數和非const的參數的總規模。目前放出來是8,由於某種原因,編譯器認爲b
不是恆定的,我用typeid
和decltype
打印類型的a
和b
乃至輸出顯示b
是int
,而不是const int
如我所料。我錯過了什麼?是否可以將一組可變參數分隔爲常量參數和非常量?
*「編譯器沒有理由爲const和非const參數類型生成兩個不同的函數」*這只是一個猜測。我不知道實際的基本原理。 – dyp 2014-08-28 18:22:25