小编HC4*_*ica的帖子

当使用书签作为轻量级分支时,Hg相当于"git log master..HEAD"?

Git的用户寻求实现涉及水银轻量级分支的工作流程往往是指出水银书签.简而言之,建议维护多个与git分支对应的头,并用书签命名.

在这样的工作流程中的一个共同愿望是查看当前分支中的所有提交的列表,因为它是从父分支(通常master或另一个长期分支)分支的.在git中,这可以通过以下方式完成:

git log <master>..HEAD
Run Code Online (Sandbox Code Playgroud)

其中<master>是父分支的名称.

我想知道,Mercurial中这个带有书签的命令相当于什么?

我正在寻找具有以下属性的命令:

  • 它具有与上面的git命令相同的语义,就其列出的修订版本以及以何种顺序(显然)而言.
  • 与git命令一样,它不涉及键入当前"分支"(书签)的名称.
  • 它不需要在当前"分支"偏离父"分支"的点处存在书签.它可能需要存在指向父"分支"头部的书签 - 我们可以调用此书签master.
  • 它很短.我真的不想输入一个长的revset表达式,每次我想这样做时都必须用引号括起来.(那就是说,我还没有弄清楚任何能让我得到我想要的表达方式,所以即使很长一段时间也会有进展.)

git version-control mercurial branch

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

为什么这里需要复制构造函数?

请考虑以下代码:

struct S
{
    S() {}
    void f();
private:
    S(const S&);
};

int main()
{
    bool some_condition;
    S my_other_S;
    (some_condition ? S() : my_other_S).f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc无法编译,说:

test.cpp: In function 'int main()':
test.cpp:6:5: error: 'S::S(const S&)' is private
test.cpp:13:29: error: within this context
Run Code Online (Sandbox Code Playgroud)

我不明白为什么复制构造应该在那一行上进行 - 目的是简单地调用f()默认构造的S实例,或者它my_other_S,即它应该等同于:

if (some_condition)
    S().f();
else
    my_other_S.f();
Run Code Online (Sandbox Code Playgroud)

第一种情况有什么不同,为什么需要复制构造函数?

编辑:那么,有没有办法在表达式上下文中表达"在预先存在的对象上执行此操作"?

c++ ternary-operator copy-constructor

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

C++预处理器元编程图灵完备吗?

我知道C++模板元编程是Turing-complete.预处理程序元编程是否同样适用?

c++ metaprogramming turing-complete c-preprocessor preprocessor-meta-program

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

将x86/64 Windows程序移植到Windows 8 ARM

本文(来自Windows工程团队)说:

WOA [Windows On ARM]不支持任何类型的虚拟化或仿真方法,也不会支持移植或运行现有的x86/64应用程序.

这是否意味着我甚至无法从ARM的源代码重新编译x86/64应用程序?

如果是的话,究竟是什么阻止我这样做?我的理解是Windows 8 ARM上存在Win32 API.

如果不是,那么无法将x86/64应用程序移植到ARM是什么意思?

windows x86 porting arm windows-8

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

C++预处理器能否判断令牌是否为字符串?

是否可以让预处理器宏确定其参数是否为字符串(文字)?

例如:

#define IS_STRING(token) ???

IS_STRING("foo")  // expands to 1
IS_STRING(foo)    // expands to 0
Run Code Online (Sandbox Code Playgroud)

c++ macros c-preprocessor

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

成员函数的部分特化

可能重复:
部分模板特化的"无效使用不完整类型"错误

为什么我能做到这一点:

template <typename T>
struct A
{
    void foo(int);
};

template <>
void A<int>::foo(int)
{
}
Run Code Online (Sandbox Code Playgroud)

但不是这个:

template <typename> struct C {};

template <typename T>
struct A
{
    void foo(int);
};

template <typename T>
void A<C<T> >::foo(int)
{
}
Run Code Online (Sandbox Code Playgroud)

对于第二种情况,GCC给出以下错误:

test.cpp:10:23: error: invalid use of incomplete type 'struct A<C<T> >'
test.cpp:4:8: error: declaration of 'struct A<C<T> >'
Run Code Online (Sandbox Code Playgroud)

编辑:

在解释为什么不允许第二个例子时,请同时考虑使成员函数也是一个模板对哪个例子有效,哪个没有影响.也就是说,这仍然有效:

template <typename T>
struct A
{
    template <typename U>
    void foo(U);
};

template <>
template <typename U>
void …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization template-specialization

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

使用声明的变量扩展

可能重复:
在可变参数模板中使用声明

我最近遇到了一个通用机制,用于组合两个函数对象以形成一个新的函数对象,其行为就像前两个被重载一样:

template <typename F1, typename F2>
struct overload : public F1, public F2
{
    overload(F1 f1, F2 f2) : F1(f1), F2(f2) {}

    using F1::operator();
    using F2::operator();
};
Run Code Online (Sandbox Code Playgroud)

我试图使用可变参数模板扩展这个想法以适用于N个函数对象:

template <typename... Fs>
struct overload : public Fs...
{
    overload(Fs... fs) : Fs(fs)... {}

    using Fs::operator();...
};
Run Code Online (Sandbox Code Playgroud)

但是,GCC抱怨我尝试在使用声明上进行可变扩展:

test.cpp:6:24: error: parameter packs not expanded with '...':
     using Fs::operator();...
                        ^
test.cpp:6:24: note:         'Fs'
test.cpp:6:26: error: expected unqualified-id before '...' token
     using Fs::operator();...
                          ^
Run Code Online (Sandbox Code Playgroud)

我尝试了一些变化,例如:

using Fs::operator()...;
Run Code Online (Sandbox Code Playgroud)

using Fs...::operator(); …
Run Code Online (Sandbox Code Playgroud)

c++ overloading variadic-templates c++11

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

使用默认函数模板参数的意外重载解析

我遇到了一个看起来很意外的重载解析行为.以下代码被gcc和clang拒绝,并出现歧义错误:

template <typename T>
struct A
{
    typedef T key_type;
};

template <typename T>
void foo(A<T> rng, T val);

template <typename T, typename U = T>
void foo(T, typename U::key_type);

int main()
{
    A<int> i;
    foo(i, 0);
}
Run Code Online (Sandbox Code Playgroud)

错误是:

test.cpp:16:5: error: call to 'foo' is ambiguous
    foo(i, 0);
    ^~~
test.cpp:8:6: note: candidate function [with T = int]
void foo(A<T> rng, T val);
     ^
test.cpp:11:6: note: candidate function [with T = A<int>, U = A<int>]
void foo(T, typename U::key_type);
     ^
Run Code Online (Sandbox Code Playgroud)

我希望两者都是完全匹配,但是第一次超载是在部分排序中获胜,因为在第一个参数 …

c++ function-templates overload-resolution c++11

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

获取 'hg import' 以使用 internal:merge

现在,当我hg import打补丁时,它无法干净地应用,hg 会部分应用补丁(可以干净地应用的大块头)并将被拒绝的大块头保存到.rej文件中。

我觉得这真的很烦人。internal:merge发生这种情况时,有没有办法让 hg 使用?

version-control merge mercurial

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

仅在.hgrc中启用mercurial扩展名才会出现

我的文件中有很多东西,.hgrc所以我将它保存在存储库中并在计算机之间共享.

我在该[extensions]部分中启用了许多扩展,但我不一定要在所有计算机上使用所有这些扩展.

不幸的是,每当我尝试.hgrc在我没有安装任何指定扩展的计算机上使用Mercurial和我的共享文件时,我会收到以下形式的消息:

*** failed to import extension evolve from $HG_EXTENSIONS/mutable-history/hgext/evolve.py: [Errno 2] No such file or directory: '/home/botond/programs/mercurial/extensions/mutable-history/hgext/evolve.py'
Run Code Online (Sandbox Code Playgroud)

每次我运行任何hg命令!

有办法避免这种情况吗?例如,有没有办法在.hgrc文件中指定,"如果你能找到它,加载这个扩展名,否则不加载它,只是保持沉默"?(然后,如果我真的尝试使用扩展名,我会收到错误.)


其他搜索字词:

  • 如何有条件地启用Mercurial扩展
  • 根据条件激活Mercurial扩展
  • 仅在Mercurial扩展存在时启用它

mercurial hgrc

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