小编Ant*_* C.的帖子

C++ 17:在元组解包时只保留一些成员

我们假设您需要调用以下方法:

std::tuple<int, int, int> foo();
Run Code Online (Sandbox Code Playgroud)

在C++ 17中,您可以调用该函数并在一行中解压缩元组:

auto [a, b, c] = foo();
Run Code Online (Sandbox Code Playgroud)

现在,我怎么能继续只存储bc并丢弃a

目前,我只知道两个选项:


1 - 我可以在自动解包时使用虚拟变量

但是,虚拟变量将被取消并且它将发出警告,因此如果我想要静默警告,那么代码将非常不愉快:

#pragma warning(push)
#pragma warning(disable:4101)
// ReSharper disable once CppDeclaratorNeverUsed
auto [_, b, c] = foo();
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)

2 - 我可以存储整个元组并用于std::get检索对我需要的唯一变量的引用.代码不那么令人不愉快,但语法也不那么简单.

此外,对于我们希望保留在元组中的每个新值,此代码的大小增加一行.

auto tuple = foo();
int b = std::get<1>(tuple);
int c = std::get<2>(tuple);
Run Code Online (Sandbox Code Playgroud)

还有另一个更直接的方法来解包元组中的一些参数吗?

c++ tuples c++17

64
推荐指数
4
解决办法
3944
查看次数

Github Actions 中的手动工作流触发器

我正在为项目存储库设置 Github Actions。

工作流程包括以下步骤:

  • 构建 docker 镜像
  • 将镜像推送到容器注册表
  • 推出 Kubernetes 部署。

但是,我有两种不同的 Kubernetes 部署:一种用于开发,一种用于生产。因此,我还有两个 Github Action 工作流。

每次推送提交时都会触发用于开发的 Github Action 工作流:

on:
  push:
    branches:
    - master
Run Code Online (Sandbox Code Playgroud)

但我不希望在我的生产工作流程中出现这种情况。我需要一个手动触发器,比如发送到生产按钮。我在文档中没有看到任何与此接近的内容。


有没有办法在 Github Actions 中手动触发工作流?

我如何在 Github Actions、Docker 或 Kubernetes 上拆分我的开发和生产工作流以实现我想要的?

continuous-integration docker kubernetes github-actions

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

gdb.execute阻止python脚本中的所有线程

我用Python 2.7编写GDB脚本.

我只是踩着指示gdb.execute("stepi").如果调试的程序空闲并等待用户交互,gdb.execute("stepi")则不返回.如果出现这种情况,我想在不终止gdb的情况下停止调试会话.

为此,我创建了一个线程,如果当前指令运行超过x秒,它将终止调试过程:

from ctypes import c_ulonglong, c_bool
from os import kill
from threading import Thread
from time import sleep
import signal

# We need mutable primitives in order to update them in the thread
it = c_ulonglong(0) # Instructions counter
program_exited = c_bool(False)
t = Thread(target=check_for_idle, args=(pid,it,program_exited))
t.start()

while not program_exited.value:
    gdb.execute("si") # Step instruction
    it.value += 1

# Threaded function that will kill the loaded program if it's idling
def check_for_idle(pid, it, program_exited): …
Run Code Online (Sandbox Code Playgroud)

python multithreading gdb gdb-python

8
推荐指数
1
解决办法
215
查看次数

计算数据框中两列的平均值

我有一个存储不同值的数据帧.样品:

a$open  a$high  a$low   a$close

1.08648 1.08707 1.08476 1.08551
1.08552 1.08623 1.08426 1.08542
1.08542 1.08572 1.08453 1.08465
1.08468 1.08566 1.08402 1.08554
1.08552 1.08565 1.08436 1.08464
1.08463 1.08543 1.08452 1.08475
1.08475 1.08504 1.08427 1.08436
1.08433 1.08438 1.08275 1.08285
1.08275 1.08353 1.08275 1.08325
1.08325 1.08431 1.08315 1.08378
1.08379 1.08383 1.08275 1.08294
1.08292 1.08338 1.08271 1.08325
Run Code Online (Sandbox Code Playgroud)

我想要做的,是创建一个新的列a$mean存储的平均值a$high,并a$low为每一行.

以下是我实现的目标:

highlowmean <- function(highs, lows){
  m <- vector(mode="numeric", length=0)
  for (i in 1:length(highs)){
    m[i] <- mean(highs[i], lows[i])
  }
  return(m)
} …
Run Code Online (Sandbox Code Playgroud)

r dataframe semantics

7
推荐指数
2
解决办法
3万
查看次数

员工轮班问题 - 将任务联系在一起

我有一个列表Employee和一个列表Mission。每个任务都有开始时间和持续时间。

在CP模型(谷歌CpSat,从或工具包),我定义shifts = Dictionary<(int,int),IntVar>,其中shifts[(missionId, employeeId)] == 1当且仅当这个任务是由这名员工来实现。

我需要将每个任务分配给一名员工,显然一名员工无法同时完成两项任务。我已经写了这两个硬约束,它们运行良好。


问题:

现在,有些任务是“链接”在一起的,应该由同一个员工来实现。它们存储如下:

linkedMissions = {{1,2}, {3,4,5}}

在这里,任务1和任务2必须由同一个员工共同实现,任务3、4和5也是如此。


为了编写这最后一个约束,我为每个员工收集了应该链接在一起的所有班次的列表,然后我让它们都相等。

foreach (var employee in listEmployeesIds)
foreach (var missionGroup in linkedMissionsIds)
{
    var linkedShifts = shifts
        .Where(o => o.Key.Item2 == employee
                    && missionGroup.Contains(o.Key.Item1))
        .Select(o => o.Value)
        .ToList();

    for (var i = 0; i < linkedShifts.Count - 1; i++) 
        model.Add(linkedShifts[i] == linkedShifts[i + 1]);
}
Run Code Online (Sandbox Code Playgroud)

然而,求解器告诉我该模型不可行,但我可以用纸和笔轻松找到工作计划。我有 35 名员工和 25 个任务,连接在一起的任务不重叠,所以应该没有任何问题。


编辑:

作为替代方法,正如@Laurent Perron 所建议的,我尝试对所有必须在一起的班次使用相同的布尔变量:

var constraintBools = new …
Run Code Online (Sandbox Code Playgroud)

c# sat or-tools cp-sat

7
推荐指数
1
解决办法
307
查看次数

具有可变数量参数的函数的指针

我有一个具有以下原型的函数:

void func(int an, ...);
Run Code Online (Sandbox Code Playgroud)

我想存储这个函数的地址并稍后调用它。我真的不知道该怎么做,我绝望地尝试:

void (*funcPtr)(int, ...);  // Declaration
funcPtr = func;     // Storage
(*funcPtr)(3,2,5);      // Call
Run Code Online (Sandbox Code Playgroud)

这段代码编译得很好,但在执行时它确实很糟糕,当我输入我的函数时, my 中的参数va_list不是我发送的参数。

提前致谢

编辑:好吧,我只是忘记了第一个论点。在我上面的代码中,调用行应替换为:

(*funcPtr)(3,3,2,5);        // Call
Run Code Online (Sandbox Code Playgroud)

c function-pointers

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

(void)sizeof(0 [array])是什么意思?

我遇到了以下代码,它返回C样式数组的大小.

template <typename Type, int N>
int GetArraySize(Type (&array)[N])
{
    (void) sizeof (0[array]);
    return N;
}
Run Code Online (Sandbox Code Playgroud)

模板部分似乎已经在这个问题中得到了解释.


但是,我还是不明白这条sizeof线的实用性是什么.有任何想法吗?有人建议避免使用未使用的变量警告,但是#pragma可以使用更简单的警告,对吧?

而且,这段代码在任何情况下都会有效吗?没有任何限制吗?

c++ arrays templates

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

我如何知道函数的参数个数?

我们怎么知道函数有多少参数?

例如,对于给定的函数f,我想做:

if (arg_number(f) == 0)
  f()
else if (arg_number(f) == 1)
  f(FALSE)
Run Code Online (Sandbox Code Playgroud)

r

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

获取SDL 2应用程序的窗口句柄

我想获得SDL2窗口的句柄,并与WinApi一起使用。

我使用以下代码检索该句柄:

/* All the SDL initalisation... */
SDL_Window* window = SDL_CreateWindow("My Window", SDL_WINDOWPOS_UNDEFINED,
                        SDL_WINDOWPOS_UNDEFINED, RESX, RESY, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (window == NULL || renderer == NULL) {
    MessageBox(NULL, L"SDL initialisation error", NULL, MB_OK);
    exit(-1);
}

SDL_SysWMinfo wmInfo;
SDL_GetWindowWMInfo(window, &wmInfo);
HWND hwnd = wmInfo.info.win.window;
Run Code Online (Sandbox Code Playgroud)

但是在这一点上,hwnd地址0xcccccccc(未使用)。

我做错什么了吗?

c winapi sdl sdl-2

2
推荐指数
1
解决办法
6077
查看次数

Type_f的unique_ptr列表

我想制作一个typedef std::list<std::unique_ptr<>>,所以我可以键入PtrList<A>,它将被替换为std::list<std::unique_ptr<A>>.

我知道用#define做到这一点的方法:

#define PtrList(x) std::list<std::unique_ptr<x>>
Run Code Online (Sandbox Code Playgroud)

但我认为typedef是合适的.但是我不知道如何实现这一点.有人能告诉我如何输入这个吗?

c++ list unique-ptr

2
推荐指数
2
解决办法
1253
查看次数