小编1ac*_*ace的帖子

如何在不添加单独的遥控器的情况下保持我的分叉同步?

我们假设someone/foobar在GitHub上有一个存储库,我将其分叉me/foobar.

如何将新的提交从父存储库直接提取到我的fork,而不必添加单独的遥控器 并记得从那里定期拉

目标是:

  • git pull 从父存储库中获取
  • git push 将所有东西发送到我的前叉

git github

260
推荐指数
5
解决办法
6万
查看次数

在编译时将文件读入字符串

我想在文件中写一些东西(让我们调用它foo.cpp)在编译时将它作为字符串包含到我的程序,类似于#include它的方式.

现在我正在使用这个C预处理器#define:

#define toString(src) #src
Run Code Online (Sandbox Code Playgroud)

将一堆代码转换为字符串,如下例所示:

const char* str = toString(
  int x;
  void main(){}
);
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以在那里阅读宏字符串化.

我想将该代码移动到外部文件,该文件将在编译时"链接". 我不希望文件必须与程序一起分发,如果我在运行时读取它就是这种情况.

我尝试使用#include如下所示的指令,但编译器拒绝了它:

const char* str = toString(
#include "foo.cpp"
);
Run Code Online (Sandbox Code Playgroud)

g++似乎完全困惑,但clang++给了我这个错误:

error: embedding a #include directive within macro arguments is not supported
Run Code Online (Sandbox Code Playgroud)

有谁知道是否/如何做到这一点?

注意:我正在使用它来编写我的GLSL着色器,尽管我怀疑这些信息是否有用.

PS:在你告诉我这是一个重复的问题之前,将我的代码放在一个巨大的字符串中,或​​者使用外部工具(例如xxd)来转储它的十六进制表示对我来说不是"解决方案",因为它们是不比我现在的方法更好(即更容易/更清洁).


几年后更新:
我刚刚意识到我从来没有回答过这个问题,因为它被重复关闭了.当我看到这个提交时,我找到了我正在寻找的答案,它本身基于对本文的评论,并且从那时起就一直在使用它.

简而言之,一个小的汇编文件包含您想要的文件NAME,并使用这三个变量在给定的文件下公开它们NAME_begin,NAME_endNAME_len …

c c++ include c-preprocessor

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

从GitHub上的已删除分支恢复作为pull-request发送的提交

我做了一些愚蠢的事......

  1. 编在GitHub上回购.
  2. 我做了一些修改,提交特德他们对我的叉子.
  3. 我将此提交作为拉回请求发送回原始回购.
  4. 这里说到愚蠢的一部分:我删除 d我的叉子.

原始仓库的所有者在他接受拉动请求之前请求对我的代码进行一些更改,我很乐意这样做.

我尝试重新分配repo,但是我无法从pull-request中检出提交,它甚至不是作为"unlinked"提交(不是任何分支或标记的提交,我不知道)官方术语).

我的问题是:如何恢复作为pull-request发送的提交

如果没有办法,在新提交中重新进行更改是一个选项,但是pull-request会丢失.我的问题不在于不会丢失提交中的更改,而是关于不丢失git历史记录,这意味着保留提交的SHA1(以及我可能不知道的任何其他内容).

git github

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

避免误报-Wswitch警告

我们有一个值列表(foo.lst):

foo,
bar,
baz,
Run Code Online (Sandbox Code Playgroud)

让我们从中得到一个枚举

enum foo {
  #include "foo.lst"
  _foo_length
};
Run Code Online (Sandbox Code Playgroud)

让我们使用枚举switch:

int main(void) {
  enum foo[_foo_length];

  switch(f[0]) {
    case foo: return 0;
    case bar: return 0;
    case baz: return 0;
  }

  __builtin_unreachable();
}
Run Code Online (Sandbox Code Playgroud)

(这段代码很愚蠢,但只是忽略它)

问题:
随着-Wswitch(包括在内-Wall),GCC和Clang(可能还有其他人)会发出警告:

警告:在switch [-Wswitch]中未处理枚举值'_foo_length'

解决方案:

  • 禁用-Wno-switch隐藏警告.
    缺点:我们失去了关于case交换机中任何其他缺失的警告.
  • 添加default: unreachable();案例.
    缺点:我们丢失了丢失案例的编译时警告,如果我们在调试时碰到其中一个丢失的案例,则支持运行时崩溃.
  • 用a替换枚举的最后一个值#define _foo_length (baz + 1),使其不再是枚举的一部分.
    缺点:它要求每次将值添加到列表时手动更新定义.有人会忘记,打破一切.

理想情况下,应该有一种方法可以将枚举值标记为不可赋值,从而使得在读取可能的值时不会在编译器中产生警告,并且不存在此值,而不需要预处理器宏需要重复修改.

有什么相似的吗?我没有想到的任何其他选择?

c enums

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

三张地图包括2把钥匙

我有一个包含3个字段的结构,两个ints (我们称之为AB)和一个bool (C).

我想创建一个该结构的数组,并能够通过任何键(A或B)访问它,获得孔对象(使用A,B和C)作为回报.我不需要做一些像"获取bool为真的所有对象"这样的东西,如果这有什么不同的话.

显然,两个关键都是独一无二的,bool不可能,但我想我为了清楚起见而提到它.

如果没有A或B,那就简单了std::map<int, bool>.

我目前看到的唯一解决方案是制作一个包含2 set秒和1 秒的包装器vector.有什么方法可以让我的生活更轻松吗?

注意:它最多包含一百个元组,因此性能不应成为问题.线性访问是可以接受的

为了使它更清晰,我希望能够做到这一点:

foobar<int, int, bool> array;  // or something along those lines

array.add(1, 101, true);
array.add(2, 102, false);

array.getA(1); // returns first object
array.getA(2);   // returns second object
array.getB(102); // returns second object again
Run Code Online (Sandbox Code Playgroud)

c++ map

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

标签 统计

c ×2

c++ ×2

git ×2

github ×2

c-preprocessor ×1

enums ×1

include ×1

map ×1