1

特定のメソッドのオプションの時間制約を処理するクラスを書いていたので、std::chrono名前空間からクラスを取得して時間を定義する方法を指定します。指定された値を超えると期限切れになるはずのこのメソッドをテストしようとしていましたtime_point:

template <typename Clock, typename Rep, typename Per>
class Foo
{
public:
    bool bar(const std::chrono::time_point<Clock, std::chrono::duration<Rep, Per>>&);
};

メソッドの呼び出しに最初に失敗した後、 を使用する必要があることに気付きましたstd::chrono::time_point_cast。メソッド呼び出しは次のようになります。

Foo<std::chrono::steady_clock, long long, std::milli> obj;
obj.bar(std::chrono::time_point_cast<std::chrono::duration<long long, std::milli>(std::chrono::steady_clock::now()));

次の IntelliSense エラーが発生します。

IntelliSense: no suitable user-defined conversion from "std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long long, std::milli>>" to "const std::chrono::time_point<std::chrono::steady_clock, std::chrono::duration<long long, std::milli>>" exists

コンパイルしようとすると、次のようになります。

error C2664: 'Foo<Clock,Rep,Per>::bar' : cannot convert parameter 1 from 'std::chrono::time_point<_Clock,_Duration>' to 'const std::chrono::time_point<_Clock,_Duration> &'

理由はわかりませんが、time_point返される bysteady_clockは代わりに使用する time_point ですsystem_clock。特にtime_point_castを usesteady_clockに設定しても、常に が表示されますsystem_clocksteady_clockの代わりに を使用すると、クラスが完全に使用できなくなることを考えると、これは本当に面倒ですsystem_clocksteady_clocksystem_clockが実質的に同じものである場合、2つの間の時間を変換するために欠けている方法はありますか?

編集: Visual Studio Professional 2012 を使用しています。また、現時点では役に立たないように見えますが、steady_clockから派生しているようです。system_clock

4

0 に答える 0