gpt4 book ai didi

c++ - SFINAE 将实例化类型限制为 std::chrono::duration 类型

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:46 25 4
gpt4 key购买 nike

我想做类似的事情

template <typename T>
class TemporalAlarmDelay<T, std::enable_if<std::is_base_of<std::chrono::duration< , >, T>::value, T>::type>
{
public:
explicit TemporalAlarmDelay(T delay)
: mDelay(delay)
{

}

private:
T mDelay;
std::chrono::steady_clock::time_point mTriggerTime;
};


int main(int argc, char** args)
{
TemporalAlarmDelay<std::chrono::nanoseconds> nanosecondDelay; // this should work
TemporalAlarmDelay<std::chrono::milliseconds> millisecondDelay; // this should work
TemporalAlarmDelay<std::chrono::seconds> secondDelay; // this should work
TemporalAlarmDelay<int> failDelay; // fail to instantiate
}

目的是限制 std::chrono::duration 的类型(例如 std::chrono::millisecondsstd::chrono: :seconds).最好的方法是什么?根据我的示例,我认为我可以使用 std::is_base_of,但我现在意识到辅助类型(例如 std::chrono::millisecondsstd::chrono::seconds 等)不要使用继承——糟糕,多么愚蠢的想法。

最佳答案

对于您的问题最简单的解决方案...

#include <chrono>

class TemporalAlarmDelay
{
public:
explicit TemporalAlarmDelay(std::chrono::steady_clock::duration delay)
: mDelay(delay)
{

}

private:
std::chrono::steady_clock::duration mDelay;
std::chrono::steady_clock::time_point mTriggerTime;
};


int main()
{
using namespace std::chrono_literals;
TemporalAlarmDelay nanosecondDelay{1ns}; // this works
TemporalAlarmDelay millisecondDelay{1ms}; // this works
TemporalAlarmDelay secondDelay{1s}; // this works
TemporalAlarmDelay failDelay{1}; // compile-time error
}

关于c++ - SFINAE 将实例化类型限制为 std::chrono::duration 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com