是否有一个现代和优雅的方式来确定月和日在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_t和std::tm)和字符串比较(类似于std::put_time)。
任何帮助,将不胜感激。
到目前为止,我在官方 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) 考虑以下示例代码:
#[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) 我正在使用 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)
我现在想知道如何使事情水平化。
考虑以下代码:
#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.2和x64 msvc v19.28. (链接到神箭)
c++ ×2
c++20 ×2
ownership ×2
rust ×2
c++-chrono ×1
date ×1
gcc ×1
markup ×1
math ×1
typesetting ×1
typst ×1
visual-c++ ×1