特定のメソッドのオプションの時間制約を処理するクラスを書いていたので、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_clock
。steady_clock
の代わりに を使用すると、クラスが完全に使用できなくなることを考えると、これは本当に面倒ですsystem_clock
。steady_clock
とsystem_clock
が実質的に同じものである場合、2つの間の時間を変換するために欠けている方法はありますか?
編集: Visual Studio Professional 2012 を使用しています。また、現時点では役に立たないように見えますが、steady_clock
から派生しているようです。system_clock