メタプログラミングで使用するSTL機能ライブラリおよび他のライブラリと同等のconstexprまたは他のコンパイル時間はありますか?具体的には、SFINAEを使用していくつかの条件を評価し、対応するタイプを生成するメタプログラムを作成しようとしています。例:メタプログラミングのためのC++ STL機能的同等物
template<int A, int B>
enable_if_t<(A < B)> my_func() {// do something
}
template<int A, int B>
enable_if_t<!(A < B)> my_func() {// do nothing
}
理想的には、私は、ユーザーがかなり硬い<
に符号化よりも、コンパレータ(等std::less<int>
)に通過できるようにしたいです。だから、のようなもの:機能オブジェクトは定数式ではないので
template<int A, int B, class comp = std::less<int>>
enable_if_t<comp(A, B)> my_func() {// do something
}
template<int A, int B, class comp = std::less<int>>
enable_if_t<comp(A, B)> my_func() {// do nothing
}
はしかし、彼らはコンパイル時に評価取得されていないので、これは動作しません。このようなものを実装する正しい方法は何でしょうか?
'enable_if_t'? –
cpplearner
それは動作しません。コンパイラは文句を言う:non-type template 引数は定数式ではない –
'enable_if_t'は[C++ 14](http://en.cppreference.com/w/cpp/types/enable_if)でのみ定義されています。どのようにそれがC++ 11で動作すると思いますか?あなたはそれを自分で定義しましたか? –