小编LiK*_*Kao的帖子

git-svn和本地分支机构

我通常使用git进行版本控制,但是现在我在svn存储库中遇到了源代码,因此我使用git-svn来访问该存储库.然而,当我尝试使用本地分支时,这似乎会导致一些麻烦.

我通常每天只提交一次本地存储库,所以我可能会在我的本地主服务器上提交,我还没有上传.当我在此时创建分支,然后其他人提交到上游存储库时,当前的一个和上一个同步的提交之间的所有提交都会重复.

为了使这一点更加清晰:

A-B-C-D-E  
     \  
      \-F
Run Code Online (Sandbox Code Playgroud)

上游存储库位于A处,两个分支处分别位于E和F. 做一个git svn rebase会导致:

A-G-H-B-C-D-E
 \
  \-B-C-F
Run Code Online (Sandbox Code Playgroud)

其中G和H是从上游回购中提取的提交.我已经尝试通过切换到另一个git svn rebase来将两个提交到另一个分支.但这让我离开了:

A-G-H-B-C-D-E
 \
  \-G-H-B-C-F
Run Code Online (Sandbox Code Playgroud)

因此,这会导致更多的提交重复.有没有一种干净的方法来处理这种情况?

svn git git-svn git-branch

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

何时在构造函数中调用虚函数是安全的

我有一些代码,我真的想从构造函数调用一个虚方法.我知道这被认为是不安全的,我对对象构造了解得足以理解为什么.我也没有遇到这些问题.目前我的代码正在运行,我认为应该没问题,但我想确定一下.

这是我在做的事情:

我有一些类层次结构,并且有一个普通的公共函数,它像往常一样转发到私有虚方法.但是我确实希望在构造我的对象时调用这个公共方法,因为它将所有数据填充到对象中.我绝对肯定这个虚拟调用来自叶类,因为从类层次结构的任何其他部分使用这个虚方法根本就没有意义.

因此,在我看来,一旦我进行虚拟调用就应该完成对象创建,一切都应该没问题.还有什么可能出错吗?我想我必须用一些重要的注释来标记逻辑的这一部分,以解释为什么这个逻辑永远不会被移动到任何基本条目,即使看起来它可能被移动.但除了其他程序员的愚蠢之外我应该没事,不应该吗?

c++ constructor virtual-functions

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

提供正确的移动语义

我目前正试图弄清楚如何使用包含指向已分配内存的指针的对象正确地移动语义.我有一个大的数据结构,其中包含一个指向实际存储的内部原始指针(出于效率原因).现在我添加了一个移动构造函数并移动operator=().在这些方法中,我是std::move()指向新结构的指针.但是我不知道如何处理来自其他结构的指针.

这是我正在做的一个简单的例子:

class big_and_complicated {
   // lots of complicated code
};

class structure {
public:
   structure() :
      m_data( new big_and_complicated() )
   {}

   structure( structure && rhs ) :
      m_data( std::move( rhs.m_data ) )
   {
      // Maybe do something to rhs here?
   }

   ~structure()
   {
      delete m_data;
   }

private:
   big_and_complicated * m_data;
}

int main() {
  structure s1;
  structure s2( std::move( s1 ) );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在从我的理解,std::move( s1 )s2唯一可以安全做的事情就是s1调用它的构造函数.但是据我所知,这将导致删除s1 …

c++ rvalue-reference move-semantics c++11

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

Cmake是否正确处理递归构建

我目前正在寻找一些项目的旧制造系统的替代品.我目前正在考虑的替代方案之一是cmake.但是据我所知,到目前为止,CMake更喜欢为每个目录配置一个配置文件,类似于Autotools和其他人喜欢的配置文件.

我知道递归make应该被认为是有害的,因为并不是总是知道整个依赖图(详见论文).因此,依赖递归make的其他工具要么在所有情况下都无法正常工作,要么需要一些包装器来解决这些问题.

我目前正在试图弄清楚CMake如何处理这种情况,以及如果在设计中考虑了论文中提到的问题.我将尝试本文中提到的示例,但是如果它们有效,它将无法确定,递归构建在所有情况下都能正常工作.

所以主要问题是:CMake是否考虑过这个问题?如果是这样,我在哪里可以阅读有关其解决方案

编辑:

我在这个问题上找到了CMake FAQ条目,但我对答案并不满意.我想真正的答案就在那里,但是我找不到它,因为到目前为止我还没有CMake内部知识,我不打算学习它们,如果我事先决定,它不适合我目的.

cmake

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

单个登录多个dokuwiki安装

我有一台服务器,我使用dokuwiki来托管主页和维基.服务器可用www.domain.com,维基可用wiki.domain.com.在内部,两个子域都是从不同的目录提供的.

但是,这意味着,每个想要注册的人都必须注册这两个域,并为两个子域管理一组重复的用户帐户.

我想要的是拥有一个系统,任何人都可以在这两个页面上注册,只需登录任何域并获得访问权限.对于两个域,仍应单独管理ACL,因为我可能多次使用命名空间名称.

我查看了dokuwiki auth插件的列表,但是我无法找到任何有用的用于此目的.另一个想法是在两个安装中对auth数据目录进行软链接或硬链接.但是,这仍然意味着用户必须多次登录.此外,我不确定我的主机是否真的允许这样的目录链接,或者这可能会搞砸这两个安装.

有没有其他方法来创建这样的设置?

php dokuwiki single-sign-on

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

std :: shared_ptr和双回调

我有一些逻辑,我将std :: shared_ptrs用于继承层次结构中的对象.有一点我需要根据它们的真实类型处理这些对象,所以我使用双重调度(即我在基类上调用一个方法,然后在另一个对象上调用一个方法,实际类型,参见eg GoF中的访客模式).

现在,此时我可以使用正确的类型或副本传递对象的引用.由于几个原因,副本是不可能的.引用通常很好,因为调用发生在shared_ptr所在的范围之下,因此在调用发生时不会销毁它.但是对于某些子类型,我需要将对象存储在STL容器中,因此我需要绝对确定它不会被销毁.显然,裸指针或新的shared_ptrs在这里不起作用,所以我需要获得对其调用的shared_ptr的引用.

现在我正在做以下事情:我使用命名构造函数而不是真实构造函数来创建对象.这会在对象内部设置weak_ptr,并为该对象的使用提供shared_ptr.当双回调发生时,我从weak_ptr获取一个新的shared_ptr并将其存储在Container中,因此该对象不会被销毁.然而,这使我的建筑逻辑真的很难看.

有没有更好的方法来做到这一点?

c++ double-dispatch shared-ptr weak-ptr

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

zlib和缓冲区大小

我目前正在尝试在我的一个项目中使用zlib进行压缩.我看了一下基本的zlib教程,我对以下语句感到困惑:

CHUNK只是用于向zlib例程提供数据和从中提取数据的缓冲区大小.较大的缓冲区大小会更有效,尤其是对于inflate().如果内存可用,则应使用大约128K或256K字节的缓冲区大小.

#define CHUNK 16384

在我的情况下,我将始终在输出端有一个小缓冲区(大约80个字节),并将通过zlib从输入端连续输入非常小的数据(几个字节).这意味着我不会在任何一方都有更大的缓冲区,但我打算使用更小的缓冲区.

但是我不确定如何解释"更大的缓冲区大小会更有效".这是指编码效率还是时间/空间效率?

我必须解决这种情况的一个想法是添加一些缓冲层,这些缓冲层已从输入中累积并反复刷新到输出.然而,这意味着我将不得不累积数据并为我的数据添加更多级别的复制,这也会损害性能.

现在,如果效率只是指时间/空间效率,我可以衡量两种方法的影响,并决定使用一种方法.但是,如果实际编码可能受较小缓冲区大小的影响,则可能很难检测到.

有没有人有使用zlib和非常小的缓冲区的经验?

zlib buffering

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