0

私は C++ テンプレートが初めてで、指定された時間単位と型で chrono::duration を返す関数を作成しようとしています。たとえば、次の行は時差を秒単位で 2 倍にしています。

std::chrono::duration<double> secd =
     std::chrono::duration_cast<std::chrono::duration<double,std::ratio<1>>>(end - start);

期間を与えるクラス関数があり、テンプレートを使用して戻り値の型と単位を示したいと思います(前の例では、double と ratio<1> になります)。私がしたいのは、次の疑似コードに似たものです。

template typename<class T, class R> std::chrono::duration<T, R> getStepTime() {
    return std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}

where_timeは期間を持つクラス メンバーです。これまでの私の試みはすべてコンパイルさえしませんでした。

テンプレートを使用せずにこれを達成するためのより良い方法がある場合、私はすべて聞いています。

4

2 に答える 2

2

の使用方法が不適切で、テンプレートにtypename閉じがありません。>コンパイルをテストするために微調整された例を次に示します。

template <typename T, typename R> 
std::chrono::duration<T, R> getStepTime() 
{
    std::chrono::duration<T, R> duration;
    return std::chrono::duration_cast<std::chrono::duration<T, R>>(duration);
}

http://ideone.com/QGYm8u

于 2013-12-28T10:38:56.560 に答える
1

typenameキーワードの不適切な使用; 試す

template<typename T, typename R> 
std::chrono::duration<T, R> getStepTime(Step step) {
   return
     std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}

ただし、より多くのコードを表示する必要があります。あなたの例は小さすぎてテストすることさえできません。

于 2013-12-28T10:21:51.427 に答える