明示的に何を望みますか、デフォルトを希望していますか?
たとえば、デフォルトのテンプレートを定義し、に依存するデフォルトのDurationT
タイプを表すことができます。
template <typename ReturnT = float,
typename DurationT = std::chrono::duration<ReturnT, std::milli>>
ReturnT tick0()
{
std::chrono::high_resolution_clock::time_point
currentPoint { std::chrono::high_resolution_clock::now() };
DurationT elapsed { currentPoint } ;
return elapsed.count();
}
のようなもの。しかし、この機能はReturnT
とは異なる戻り値の型とDurationT
と呼ばれていることを許容できるのですか?
私は次のことを受け入れることができますか?
foo0<long double, std::chrono::duration<float, std::milli>>();
私はそうではないと思います。
だから、あなたは1つのタイプのみを表現し、他のタイプは派生するべきだと思います。
デフォルトでstd::chrono::duration<float, std::milli>
でDurationT
を表現し、ReturnT
を推測することができます。例で
template <typename DurationT = std::chrono::duration<float, std::milli>>
decltype(std::declval<DurationT>().count()) tick1()
{
std::chrono::high_resolution_clock::time_point
currentPoint { std::chrono::high_resolution_clock::now() };
DurationT elapsed { currentPoint } ;
return elapsed.count();
}
それとも、デフォルトfloat
で、ReturnT
を発現し、それからDurationT
を推測することができます。例:
template <typename ReturnT = float>
ReturnT tick2()
{
using DurationT = std::chrono::duration<ReturnT, std::milli>;
std::chrono::high_resolution_clock::time_point
currentPoint { std::chrono::high_resolution_clock::now() };
DurationT elapsed { currentPoint } ;
return elapsed.count();
}
ここで達成したいことは明確ではありません。関数のテンプレートパラメータに 'DurationType'を宣言するのはなぜですか?唯一のテンプレートのパラメータとして 'ReturnType'を持ち、' DurationType'を 'auto'に置き換えることができます。 –