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?
我尝试创建一个带有值和边界的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)
但 clang 11.0.0 无法编译并显示错误消息:
没有可行的构造函数或推导指南来推导“iota_view”的模板参数
我究竟做错了什么?
我正在寻找一种范围视图的实现,它可以懒惰地创建给定范围的 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)
我需要一个特殊格式的时间戳来进行 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 文档非常奇怪
数字范围查询
前面的示例是针对字符串字段的范围查询。数值 > 也可以使用范围查询来搜索。
唯一索引为数字字段的字段是相应 PI 标记点属性的 CreationDate 和 ChangeDate 字段。要对这些字段建立索引 > 将它们添加到 PI 标记点属性列表中。可以在“设置”页面上查看或修改此配置。
这些日期时间值通过转换索引为数值:日期转换为自 …
我想将一个参数包传递到一个模板方法中,该方法创建一个由另一个模板参数指定的类型的对象的新实例。
最小代码示例:
我的代码实际上使用创建的类型和处理程序执行更多操作
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移动。我知道我需要不断移动参数,但我不知道如何使用参数包来做到这一点。
我怎么能做到这一点?