小编The*_*moo的帖子

Why is there no std::copysign specialization for integers in c++?

I tried using std::copysign to set an int with the sign of another.

int translate = getTranslate();
int offset = getOffset();
translate = std::copysign(offset, translate)
Run Code Online (Sandbox Code Playgroud)

But copysign<int, int> returns a double. How should I use it better? Or what should I use instead?

c++

5
推荐指数
1
解决办法
251
查看次数

无法创建带有值和绑定的 std::ranges::iota_view

我尝试创建一个带有值和边界的std::ranges::iota_view :

#include <ranges>
#include <vector>

int main() {
  std::vector v{1,2,3};
  auto indices = std::ranges::views::iota(0, v.size());
}
Run Code Online (Sandbox Code Playgroud)

链接到 godbolt 上的程序

但 clang 11.0.0 无法编译并显示错误消息:

没有可行的构造函数或推导指南来推导“iota_view”的模板参数

我究竟做错了什么?

c++ range

5
推荐指数
1
解决办法
1393
查看次数

C++ 范围视图的惰性组合

我正在寻找一种范围视图的实现,它可以懒惰地创建给定范围的 k 个组合。

例如,{1, 2, 3}具有 2 个组合的范围应返回:

std::vector v {1,2,3};
auto rng = ranges::views::combinations<2>(v);
for(auto[a,b] : rng)
  std::cout << a << ' ' << b << '\n';
// 1, 2
// 1, 3
// 2, 3
Run Code Online (Sandbox Code Playgroud)

非常类似于 Pythonsitertools.combinations()模块。

我从这个问题中找到了实现。但它们不是针对范围的,也不是懒惰的。

解决方案

由于这个问题的答案,我目前的解决方案:

std::vector v {1,2,3};
auto rng = ranges::views::combinations<2>(v);
for(auto[a,b] : rng)
  std::cout << a << ' ' << b << '\n';
// 1, 2
// 1, 3
// 2, 3
Run Code Online (Sandbox Code Playgroud)

关联

c++ algorithm range c++20

5
推荐指数
1
解决办法
304
查看次数

C++ 获取自 01/01/0001 00:00:00 以来的毫秒数

我需要一个特殊格式的时间戳来进行 API 调用:

日期将转换为自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 UTC 毫秒数。

我的第一个假设是使用:

auto now = std::chrono::system_clock::now();
std::cout << "millisceconds since epoch: "
          << std::chrono::duration_cast<std::chrono::milliseconds>(
               now.time_since_epoch()).count() 
Run Code Online (Sandbox Code Playgroud)

但当然输出是 UNIX 纪元的时间间隔 Thu Jan 1 00:00:00 1970

所以对于 anow = "Wed Dec 12 13:30:00 2018"它返回1544617800000ms。

如何获取自 0001 年 1 月 1 日午夜 12:00:00 以来经过的毫秒数?

上下文 OSISoft API

用于指定日期范围的 OSISoft API 文档非常奇怪

数字范围查询

前面的示例是针对字符串字段的范围查询。数值 > 也可以使用范围查询来搜索。

唯一索引为数字字段的字段是相应 PI 标记点属性的 CreationDate 和 ChangeDate 字段。要对这些字段建立索引 > 将它们添加到 PI 标记点属性列表中。可以在“设置”页面上查看或修改此配置。

这些日期时间值通过转换索引为数值:日期转换为自 …

c++ time osisoft

3
推荐指数
1
解决办法
1534
查看次数

如何从模板方法内的参数包中移动 unique_ptr

我想将一个参数包传递到一个模板方法中,该方法创建一个由另一个模板参数指定的类型的对象的新实例。

最小代码示例

我的代码实际上使用创建的类型和处理程序执行更多操作

template<typename T, typename... Args>
static bool CreateAndDo(Handler & rHandler, Args.. args)
{
  auto pT = T::Create(args...);
  rHandler.DoStuff(std::move(pT));
}
Run Code Online (Sandbox Code Playgroud)

简单用法:

Handler tHander;
// the 0 is just an example of an argument
CreateAndDo<ConcreteType>(tHander, 0);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我的一个论点是std::unique_ptr.

auto pPtr = std::make_unique<ConcreteArg>();
CreateAndDo<ConcreteType>(tHander, std::move(pPtr));
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为std::unique_ptr必须由CreateAndDoMethod移动。我知道我需要不断移动参数,但我不知道如何使用参数包来做到这一点。

我怎么能做到这一点?

c++ templates unique-ptr

0
推荐指数
1
解决办法
153
查看次数

标签 统计

c++ ×5

range ×2

algorithm ×1

c++20 ×1

osisoft ×1

templates ×1

time ×1

unique-ptr ×1