gpt4 book ai didi

c++ - steady_clock::now() 返回类型对 gcc 无效

转载 作者:行者123 更新时间:2023-11-30 03:13:58 26 4
gpt4 key购买 nike

我有以下代码:

#include <chrono>

struct SteadyTime : std::chrono::steady_clock::time_point {
using time_point::time_point;

static SteadyTime now() {
return clock::now();
}
};

这适用于 Visual Studio 2019,但使用 gcc 8.3 时出现以下错误:

<source>: In static member function 'static SteadyTime SteadyTime::now()':

<source>:7:24: error: could not convert 'std::chrono::_V2::steady_clock::now()' from 'std::chrono::_V2::steady_clock::time_point' {aka 'std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >'} to 'SteadyTime'

return clock::now();

~~~~~~~~~~^~

Compiler returned: 1

这段代码似乎是标准的,所以可能有什么问题?

最佳答案

你要做的基本上是这样的:

struct Base
{};

Base getBase();

struct Derived : Base
{
static Derived get() { return getBase(); }
};

https://godbolt.org/z/KZyP99

这行不通,因为编译器不知道如何将 Base 转换为 Derived。您可以为 Derived 添加构造函数 from Base 来解决这个问题。

虽然我会质疑总体设计。从 std 设施继承通常是一个设计缺陷/弱点。优先使用组合而不是继承(尤其是,如果您打算派生的对象不是多态的)。如果需要,让 SteadyTime 公开一个 time_point 成员,或者手动包装它的接口(interface)。在同一继承层次结构中拥有和使用多个具体(即非抽象)类很快会导致对象切片和其他 UB 等困惑,以及用户的普遍困惑。

关于c++ - steady_clock::now() 返回类型对 gcc 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304058/

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