考慮下面的例子:解壓類作用域?
#include <iostream>
#include <type_traits>
template <typename Type>
struct Something
{
template <typename OtherType>
static constexpr bool same()
{return std::is_same<Type, OtherType>::value;}
};
template <class Type>
struct Example
{
static_assert(Type::template same<double>(), "ERROR");
};
int main()
{
Example<Something<double>> example;
return 0;
}
的static_assert
檢查通過執行same()
功能傳遞的類型是否滿足某種條件。
現在考慮一個可以傳遞多個Types
到Example
:
#include <iostream>
#include <type_traits>
template <typename Type>
struct Something
{
template <typename OtherType>
static constexpr bool same()
{return std::is_same<Type, OtherType>::value;}
};
template <class... Types>
struct Example
{
static_assert(/* SOMETHING */, "ERROR");
};
int main()
{
Example<Something<double>> example;
return 0;
}
有一個工作的語法,而不是SOMETHING
檢查條件是否對所有類型的驗證(沒有一堆的輔助功能:我知道可以用這種方式完成,但我想知道是否有其他方法(如使用簡單的拆包處理...)
真的可以用一個參數包做的唯一的事情就是解開它作爲一組參數的功能。所以不,沒有幫手就不能這樣做 –
@MooingDuck先生,爲什麼不回答? – luk32
@ luk32:我當時有兩句話的野心,但沒有更多。我已經刷新了一個完整的答案。 –