どうやら私は明らかな何かを見逃しているようです.SFINAEで最も可能性が高いですが、私の人生では、「それ」が何であるかを見つけることができません. 親知らずのせいにすることもできますが、それは知恵に関するものなので奇妙に聞こえるでしょう...
C++ では、概念 (Boost、Lite など) を使用する場合REQUIRES(list_of_concepts)
、たとえば、関数呼び出しの型は " BidirectionalIteratorAccess
" のような概念に従います。しかし、この機能に対応する「クエリ」コンポーネントは何ですか? 基本的に、クラス型 T がモデル化されているかどうかを確認するにはどうすればよいですBidirectionalIteratorAccess
か?
私が知っているのは、私が探していない、REQUIRES
またはBOOST_CONCEPT_ASSERT
それらが真またはコンパイルエラーであるためです。のように、真か偽かの何かを探していますtype_traits
。Boost.Concept Assert などのドキュメントでは、次のようなもので SFINAE チェックを使用することが示唆されていますnot_satisfied<Concept>
が、そうであれば、何らかの理由でどの部分がどこにあるのかわかりません。SFINAE テストは次のようになると推測できます。
template <typename T> struct models_MyConcept {
template <typename C>
static yes_t test (some_sort_of_argument_using_MyConcept);
template <typename C>
static no_t test (...);
static const bool value = sizeof(something_calling_test_with_a_C_argument_somehow) == sizeof(yes_t);
};
…いったい、どのような馬鹿が親知らずと名付けたのですか?そして、なぜ私は脱線したのですか?