小编Spr*_*ite的帖子

C++ 20 chrono:如何将 time_point 与 month_day 进行比较?

是否有一个现代和优雅的方式来确定time_point可变匹配给定的month_day变量?

例如,我想知道今天是否是圣诞节。我有以下代码:

#include <chrono>

bool IsTodayChristmas()
{
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now = system_clock::now();

    // return Now == Christmas; // How to?
}
Run Code Online (Sandbox Code Playgroud)

现代而优雅:我的意思是如果可能的话,我宁愿不使用旧的 C 类型(类似于std::time_tstd::tm)和字符串比较(类似于std::put_time)。

任何帮助,将不胜感激。

c++ date c++-chrono c++20

14
推荐指数
1
解决办法
778
查看次数

使用构建器模式时,我应该按值还是可变引用获取“self”?

到目前为止,我在官方 Rust 代码和其他包中看到了两种构建器模式:

impl DataBuilder {
    pub fn new() -> DataBuilder { ... }
    pub fn arg1(&mut self, arg1: Arg1Type) -> &mut Builder { ... }
    pub fn arg2(&mut self, arg2: Arg2Type) -> &mut Builder { ... }
    ...
    pub fn build(&self) -> Data { ... }
}
Run Code Online (Sandbox Code Playgroud)
impl DataBuilder {
    pub fn new() -> DataBuilder { ... }
    pub fn arg1(self, arg1: Arg1Type) -> Builder { ... }
    pub fn arg2(self, arg2: Arg2Type) -> Builder { ... }
    ... …
Run Code Online (Sandbox Code Playgroud)

design-patterns ownership rust

13
推荐指数
1
解决办法
1215
查看次数

为用户定义类型实现 ToOwned

考虑以下示例代码:

#[derive(Clone)]
struct DataRef<'a> {
    text: &'a str,
}

#[derive(Clone)]
struct DataOwned {
    text: String,
}
Run Code Online (Sandbox Code Playgroud)

我将以这种方式ToOwned实现:DataRef

impl ToOwned for DataRef<'_> {
    type Owned = DataOwned;

    fn to_owned(&self) -> DataOwned {
        DataOwned {
            text: self.text.to_owned(),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从字面上看,这句话有道理吧?但也存在一些问题。


第一个问题是,因为ToOwned提供了一个全面的实现

impl<T> ToOwned for T where T: Clone { ... }
Run Code Online (Sandbox Code Playgroud)

上面的代码会出现编译错误:

error[E0119]: conflicting implementations of trait `std::borrow::ToOwned` for type `DataRef<'_>`
  --> src/main.rs:13:1
   |
13 | impl ToOwned for DataRef<'_> {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   | …
Run Code Online (Sandbox Code Playgroud)

ownership rust

10
推荐指数
1
解决办法
1494
查看次数

打字机水平显示2张图像?

我正在使用 typest 渲染一些东西,我想要并排显示 2 个图像,我弄清楚了如何垂直获取东西:

#figure(
  (image("eulerian.svg", width: 10%),
  image("lagrangian.svg", width: 10%)).join(),
  caption: [A curious figure.],
) <glacier>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我现在想知道如何使事情水平化。

math markup typesetting typst

6
推荐指数
1
解决办法
2913
查看次数

GCC 和 MSVC 中 consteve 的不同行为(不起作用)

考虑以下代码:

#include <cstdint>
#include <vector>

class ClassT
{
public:
    consteval static size_t GetSize()
    {
        return sizeof(int);
    }

    void Resize()
    {
        _Data.resize(GetSize(), 0);
    }

    std::vector<uint8_t> _Data;
};

int main()
{
    ClassT Object;
    Object.Resize();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC编译成功,但是MSVC给出以下错误:

error C7595: 'ClassT::GetSize': call to immediate function is not a constant expression
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?或者这真的是 MSVC 的错误吗?

编译器版本:x86-64 gcc 10.2x64 msvc v19.28. (链接到神箭

c++ gcc visual-c++ language-lawyer c++20

4
推荐指数
1
解决办法
863
查看次数