私の問題は次のとおりです。私はconstexpr値のリストに基づいて型のリストをソートしたい。問題は、この機能に煮詰めすることができる。constexpr関数の呼び出しによって静的なconstexprメンバを定義する
template <typename U, typename V>
auto min(U,V) -> std::conditional_t<U::value < V::value, U, V>
{ return {}; }
一方値がrespecively、各タイプのいくつかの静的constexprのメンバーでなければなりません。 次のスニペットは、使用方法を示します。
// (I)
// This must even be declared outside of a function body due to the statics :(
struct X { static constexpr double value = 2.; };
struct Y { static constexpr double value = 1.; };
int main()
{
X x;
Y y;
auto z = min(x,y);
std::cout << typeid(z).name() << " : " << z.value << std::endl;
}
私の目標は、私は関数を呼び出すと価値を提供することです。
// (II)
auto w = min(Value<[]{ return 3.14; }>{}, Value<[]{ return 2.71; }>{});
std::cout << typeid(w).name() << " : " << w.value << std::endl;
実際の型は、追加のパラメータとすることができますソートする:私はこの目標になった最も近いものは 次
template <double (*F)()>
struct Value { static constexpr double value = F(); };
次のように呼び出すことができます使用してラムダです。
問題は、上記のものが標準のC++でないことです。しかし、最新のclang はこれを正常にコンパイルします
今、私の質問は、上記の(リスト(II))を達成するための標準に準拠したもう1つの方法、すなわち、 がある場所で(何らかの方法で)提供されたconstexorオブジェクトに基づいて型を計算する関数を定義していますか?関数の引数?
P .:私はstd::integral_constant
を使用して解決策を認識しています。ただし、これは整数型に限定されています。私は、すべてのconstexprオブジェクト、特に浮動小数点型、および文字列で機能するソリューションに興味があります。
好奇心を要らずに:これは標準に準拠していないのはなぜですか? – KjMag
@KjMag [この質問](https://stackoverflow.com/questions/44485610/will-i-be-able-to-declare-constexpr-lambda-inside-a-template-parameter)を参照してください。 – Rakete1111