struct Foo
があり、Foo
にint
があるかどうかを調べたいとします。構造体に特定の型のメンバーがあるかどうかを確認
struct Foo { int a; char c; };
has_int<Foo>::value; // should be true
これは、特定の種類のチェック、私が実際にしたいと思うものをの最も基本的な形式である:私は何を私の最後にそれを変換することができ、上記を行う方法を知っていた場合は
has_type<Foo, int>::value;
目標は次のとおりです。
私が試したもののためとしてhas_pointer<Foo>::value; // false
struct Bar { int a; void *b; };
has_pointer<Bar>::value; // true
、それが始めるのは難しい、私は構造体に含まれる種類のパックを得ることができれば、私は書くことができるということであると考えることができる最高残り:
template <typename... Ts>
constexpr bool any_is_pointer() noexcept {
return (... || std::is_pointer_v<Ts>);
}
私が求めていることは、非常にうまくいかない可能性があるようです。私は重複を見つけることができませんでしたが、私はそれがそこにあるかもしれないことができなかったことに驚いた。
これは不可能ですが、C++にはリフレクションがありません。しかし、 'std :: tuple'のようなものは非常に簡単です。 – Barry
基本的に、あなたは反射を望む。 C++はリフレクションを行いません。しかし、私は助けることはできませんが、疑問に思っています:あなたは何とか 'has_int'を実装することができたとします - それをどのように使用する予定ですか?あなたが解決しようとしている本当の問題は何ですか? –
@IgorTandetnik私は、ポインタや参照を含む構造体を微妙に扱う必要がある状況にあります。コンパイル時にどのような操作を許可するかを決めるのがポイントです。私は本当に詳細なレベルで説明することはできません。 –