gpt4 book ai didi

c++ - 仅当不是别名时如何编写std::chrono::high_resolution时钟类模板特化

转载 作者:行者123 更新时间:2023-12-01 14:39:16 24 4
gpt4 key购买 nike

我想为std::chrono::system_clock,std::chrono::steady_clock和std::chrono::high_resolution_clock编写类模板特化。

我写了一个简单的代码,如下所示:

#include <chrono>

template <typename T>
struct foo;

template <>
struct foo<std::chrono::system_clock>
{};

template <>
struct foo<std::chrono::steady_clock>
{};

// pseudo code
//
// if constexpr (
// !std::is_same_v(std::chrono::high_resolution_clock, std::chrono::system_clock> &&
// !std::is_same_v(std::chrono::high_resolution_clock, std::chrono::steady_clock>
// ) {
//

template <>
struct foo<std::chrono::high_resolution_clock>
{};

// }

int main() {
}

编译结果: https://wandbox.org/permlink/8SqPZsMYdT8WKai3

如果std::chrono::high_resolution_clock是std::chrono::system_clock或std::chrono::steady_clock的别名,那么我得到了相同类模板特化的错误重新定义。

我正在寻找一种仅在不是别名的情况下启用std::chrono::high_resolution_clock类模板特化的方法。
我在演示我想做什么的代码中写了注释(伪代码)。

有什么好办法吗?

最佳答案

您可以提供其他模板参数,具体取决于要检查的条件。主要模板为:

template <typename T, bool = true>
struct foo;

那么特化将是:
template <>
struct foo<std::chrono::high_resolution_clock,
!std::is_same_v<std::chrono::high_resolution_clock,
std::chrono::system_clock>
&&
!std::is_same_v<std::chrono::high_resolution_clock,
std::chrono::steady_clock>
>
{};

这是 demo

关于c++ - 仅当不是别名时如何编写std::chrono::high_resolution时钟类模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62344047/

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