我想問編譯器檢查一個元組是否只包含「元類型」。C++概念循環
順便說一句,我是全新的C++概念。
template < typename T >
struct Type {
using type = T;
};
//! A type can be easily check with a small concept
template < typename T >
concept bool C_Type = requires {
typename T::type;
};
//! But how to apply it on a whole tuple?
template < typename T >
void foo(T tuple) {}
int main() {
constexpr auto test = std::make_tuple(Type<int>{}, Type<double>{});
foo(test);
}
所以我想,以確保每一個類型的序列中(假設只有一些可迭代這個例子)是「元類型」。
我使用Boost Hana,如果它可以簡化代碼。
目前我甚至不確定是否有可能。我希望是的,我想我只需要學習更多元編程的東西。所以我會繼續搜索並嘗試,但如果有人已經有了答案,謝謝!
問題是:你將如何使用T元組?你有什麼限制嗎?它必須是一個'std :: tuple'?如果是這樣,使用'std :: tuple_element',如果沒有定義你自己的特徵和約束...注意'std :: tuple_element'也處理'std :: array'和'std :: pair',所以也許你可以期望任何'T'專門化它以及使用'foo'。否則,你可能想嘗試使用'decltype(std :: get (tuple))'或者你訪問你的元組元素。 – BeyelerStudios
你明顯沒有使用當前版本的概念,因爲據我所知,概念布爾概念已經在那個版本的概念中消失了。你問什麼版本,具體? – Yakk
@Yakk嗯,我正在閱讀http://en.cppreference.com/w/cpp/language/constraints,並使用Gcc 7.1,所以我正在考慮在最後一個。 –