1

SFINAEを使用すると、型に特定のデータ メンバーまたはメンバー関数があるかどうかを検出できます。タイプが存在するかどうかを検出するためにも使用できますか? 背景: 含まれているかどうかを知りたい<vector>

4

2 に答える 2

1

私はそれをC++0xで動作させることができただけですが、それは可能です。

struct no_type {};
struct is_vector_included {
    template<typename U> static decltype(std::vector<U>::iterator()) func( U* );
    template<typename U> static no_type func( ... );
    static const bool value = !std::is_same<no_type, decltype(func<int>(nullptr))>::value;
};

構造は非常に不思議であり、特定の明らかな単純化があるはずですが、それらは機能しません。さらに重要なのは、確信を持ってみません#include <vector>か?

于 2010-11-17T19:30:20.827 に答える
0

私は質問に1つの問題があります:

含まれていない場合<vector>、タイプが翻訳ユニットに導入されているかどうかを知らずにテストするにはどうすればよいですか?

あなたは効果的にコンパイラに存在するかどうかをテストするように求めていますが、何よりもまずvector宣言せずにそれをどのように求めることができますか?vector

どのソリューションがどのように機能し、標準に準拠する可能性があるかはわかりませんが、私は標準化者ではないため、気付いていない警告がある可能性があります。

于 2010-11-18T07:39:14.217 に答える