タプルに「メタタイプ」のみが含まれているかどうかをコンパイラに確認してもらいたいです。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 tuple'をどのように使用しますか?それにはどんな制約がありますか?それは 'std :: tuple'でなければなりませんか? 'std :: tuple_element'は' std :: tuple_element'を使用します。独自の特性や制約を定義していない場合は... 'std :: tuple_element'も' std :: array'と 'std :: pair'を処理することに注意してください。 'T'も' foo'を使うように特化することを期待しています。それ以外の場合は 'decltype(std :: get (タプル))'を試してみても構いませんが、タプル要素にアクセスすることもできます。 – BeyelerStudios
あなたは明らかに、現在のバージョンのコンセプトを使用していません。私が知る限り、コンセプトのバージョンでは、「コンセプトブール」はなくなっています。あなたは特にどのバージョンをお求めですか? – Yakk
@Yakkまあ、私はhttp://en.cppreference.com/w/cpp/language/constraintsを読んでいて、Gcc 7.1を使っているので、最後のものになると思っていました。 –