小编Emi*_*ano的帖子

单个文件的硬重置

我目前在工作目录中有三个已修改的文件.但是我希望其中一个重置为HEAD状态.

在SVN我会使用svn revert <filename>(svn update <filename>如果需要的话后跟),但在git我应该使用git reset --hard.但是,此命令无法在单个文件上运行.

有没有办法在git中丢弃单个文件更改并用新的HEAD副本覆盖它?

git

906
推荐指数
7
解决办法
49万
查看次数

Android中任务和进程的区别

我对Android中的任务和进程之间的区别感到有点困惑.

如果我理解正确,任务只是一堆活动.从我到目前为止阅读的内容来看,我认为任务看起来像这样:

| Activity A running in Process P1 |
| Activity B running in Process P2 |
| Activity C running in Process P3 |
Run Code Online (Sandbox Code Playgroud)

所以基本上来自不同进程的活动可以包含在同一个堆栈中.我对么?

另一个问题:"应用程序上下文"的真正含义是什么?过程还是任务?

最后一个问题:应用程序类(这基本上是一个单)表示进程或任务?

android

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

为什么围绕pthread等待条件需要while循环?

我正在学习pthread和等待条件.据我所知,一个典型的等待线程是这样的:

pthread_mutex_lock(&m);
while(!condition)
     pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
Run Code Online (Sandbox Code Playgroud)

我无法理解的是,while(!condition)即使我pthread_cond_signal()用来唤醒线程,为什么这条线是必要的.

我可以理解,如果我使用pthread_cond_broadcast()我需要测试条件,因为我唤醒所有等待的线程,其中一个可以在解锁互斥锁之前再次使条件为假(从而将执行转移到另一个不应该执行的唤醒线程点).但是,如果我使用pthread_cond_signal()我只唤醒一个线程,所以条件必须是真的.所以代码看起来像这样:

pthread_mutex_lock(&m);
pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
Run Code Online (Sandbox Code Playgroud)

我读到了一些可能发生的虚假信号.这是(也是唯一的)原因吗?我为什么要有虚假的信号呢?或者还有其他我没有得到的东西?

我假设信号代码是这样的:

pthread_mutex_lock(&m);
condition = true;
pthread_cond_signal(&cond); // Should wake up *one* thread
pthread_mutex_unlock(&m);
Run Code Online (Sandbox Code Playgroud)

c multithreading pthreads

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

shared_from_this从构造函数调用

我必须在创建容器时在容器中注册它.没有智能指针,我会使用这样的东西:

a_class::a_class()
{
    register_somewhere(this);
}
Run Code Online (Sandbox Code Playgroud)

使用智能指针我应该使用,shared_from_this但我不能在构造函数中使用它.

有没有一个干净的方法来解决这个问题?在类似的情况下你会做什么?我正在考虑init在创建之后引入一个方法来调用,并将所有内容放在像这样的工厂函数中:

boost::shared_ptr<a_class> create_a()
{
    boost::shared_ptr<a_class> ptr(new a_class);
    ptr->init();
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

没有问题,或者在这种情况下有一个标准程序可以遵循?

编辑:其实我的情况更复杂.我有2个对象,它们将保持彼此的指针.所以事实是我不是"注册"而是创建另一个b_class需要this作为参数的对象(让我们说).作为弱指针b_class接收this并存储它.

我添加这个是因为你给我设计建议(非常感谢),至少你可以知道我在做什么:

a_class::a_class()
{
    b = new b_class(this);
}
Run Code Online (Sandbox Code Playgroud)

在我的程序中a_class是一个实体,b_class是表示状态的具体类之一(在构造函数中它只是起始状态).a_class需要指向当前状态的指针,b_class需要操纵实体.

a_class负责创建和销毁b_class实例,从而维护一个shared_ptr但b_class需要操作a_class并因此维护一个弱指针.a_class实例"幸存" b_class实例.

你建议在这种情况下避免使用智能指针吗?

c++ boost

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

项目引用和项目依赖项之间有什么区别?

我在Visual Studio 2010中有一个简单的解决方案,包含一些静态库,一些DLL和一个可执行文件.

一些库相互依赖(例如,DLL在构建DLL本身之前需要构建两个静态lib项目),并且似乎有两种方法可以实现此目的:

1)如果我右键单击解决方案,我可以选择"项目依赖项..."并设置构建顺序

2)我可以右键单击DLL项目并选择Properties-> Framework and References,然后添加一个新引用.

#1和#2有什么区别?在Visual Studio 2010中表达两个项目之间的构建依赖关系的更好方法是什么?

build visual-studio-2010

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

(静态链接)DLL使用与主程序不同的堆吗?

我是Windows编程的新手,我只是"迷失"两个小时寻找一个每个人都知道的错误:你不能在DLL中创建一个对象并在另一个DLL(或主程序)中销毁它.

我几乎可以肯定,在Linux/Unix上,情况并非如此(如果是的话,请说出来,但我很确定我做了数千次而没有问题......).

在这一点上,我有几个问题:

1)静态链接的DLL使用与主程序不同的堆吗?

2)静态链接的DLL是否映射在主程序的同一进程空间中?(我很确定这里的答案是一个很大的问题,否则将主程序中的函数指针传递给DLL中的函数是没有意义的.)

我说的是普通/常规DLL,而不是COM/ATL服务

编辑:通过"静态链接"我的意思是我不使用LoadLibrary加载DLL但我链接到存根库

linux windows heap dll heap-corruption

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

可以使用模板按名称访问struct变量吗?

我们假设我有一个这样的结构:

struct my_struct
{
  int a;
  int b; 
}
Run Code Online (Sandbox Code Playgroud)

我有一个函数应该为"a"或"b"设置一个新值.此函数还需要指定要设置的变量.一个典型的例子是这样的:

void f(int which, my_struct* s, int new_value)
{
  if(which == 0)
     s->a = new_value;
  else
     s->b = new_value; 
}
Run Code Online (Sandbox Code Playgroud)

由于我不会在这里写的原因,我无法将指针传递给a/b到f.所以我不能用my_struct :: a或my_struct :: b的地址调用f.我不能做的另一件事是在my_struct中声明一个向量(int vars [2])并将一个整数作为索引传递给f.基本上在f中我需要按名称访问变量.

以前的例子的问题是,在将来我计划向struct添加更多变量,在这种情况下,我将记得向f添加更多if语句,这对于可移植性是不利的.我能做的就是将f写为宏,如下所示:

#define FUNC(which)
void f(my_struct* s, int new_value) \
{ \
        s->which = new_value; \
} 
Run Code Online (Sandbox Code Playgroud)

然后我可以调用FUNC(a)或FUNC(b).

这可行,但我不喜欢使用宏.所以我的问题是:有没有办法使用模板而不是宏来实现相同的目标?

编辑:我将尝试解释为什么我不能使用指针,我需要按名称访问变量.基本上,结构包含系统的状态.该系统需要在请求时"撤消"其状态.使用名为undo_token的接口处理撤消,如下所示:

class undo_token
{
public:
   void undo(my_struct* s) = 0;
};
Run Code Online (Sandbox Code Playgroud)

因此,由于多态性,我无法将指针传递给undo方法(mystruct也包含其他类型的变量).

当我向结构中添加一个新变量时,我通常还会添加一个新类,如下所示:

class undo_a : public undo_token
{
  int new_value;
public:
  undo_a(int new_value) { …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

我可以在printf中传递一个预期整数的字符吗?

以下代码是否正确?

char mychar = 200;
printf("%x", mychar);
Run Code Online (Sandbox Code Playgroud)

根据http://www.cplusplus.com/reference/clibrary/cstdio/printf/ %x期望一个整数(我的编译器为4个字节),我在这里只传递1个字节.由于printf使用了varargs,我担心这只会因为堆栈上的字节对齐而起作用(即,当在堆栈上按下时,char总是使用4个字节).

我认为最好写一下:

char mychar = 200;
printf("%x", static_cast<int>(mychar));
Run Code Online (Sandbox Code Playgroud)

你认为第一个代码是否安全?如果没有,如果我切换到bigendian架构,你认为我能得到不同的输出吗?

c c++ variadic-functions

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

隐藏行标签

我正在使用Qt4创建一个表,使用QTableWidget该类.

问题是:我想隐藏行标签(即数字).我只关心专栏.我想得到这个:

替代文字
(来源:ldc.usb.ve)

我怎么能做到这一点?

user-interface qt4 pyqt

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

使用boost :: python将C++类实例传递给python

我有一个库创建对象(类A的实例)并将它们传递给python程序,该程序应该能够调用它们的方法.

基本上我有C++类实例,我想从python中使用它们.有时,该对象应该传递回C++进行一些操作.

我创建了以下包装器文件(假设该New函数在C++代码中的某处调用):

#include <boost/python.hpp>
#include <iostream>
#include <boost/smart_ptr.hpp>

using namespace boost;
using namespace boost::python;

int calls = 0;

struct A
{
   int f() { return calls++; }
   ~A() { std::cout << "destroyed\n"; }
};

shared_ptr<A> existing_instance;

void New() { existing_instance = shared_ptr<A>( new A() ); }

int Count( shared_ptr<A> a ) { return a.use_count(); }

BOOST_PYTHON_MODULE(libp)
{
    class_<A>("A")
        .def("f", &A::f)
    ;

    def("Count", &Count);

    register_ptr_to_python< shared_ptr<A> >();
} 
Run Code Online (Sandbox Code Playgroud)

代码缺少python获取的部分existing_instance.我没有粘贴它,但我只是说我为此目的使用回调机制.

这段代码有效,但我有几个问题:

  1. 在Count函数(以及所有其他C++操作函数中)可以这样传递a或者更好地做类似的事情const shared_ptr<A>&吗?在我在python …

c++ python boost boost-python

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