小编Ser*_* K.的帖子

避免使用git和make重新编译

我在git中有两个开发分支,我经常需要在两者之间进行更改.然而,真正令人沮丧的是,每次我在git中更改分支时,整个项目都会重建,因为某些文件的文件系统时间戳会发生变化.

Ofc,makefile被配置为将项目构建到两个不同的构建目录中.

有没有办法解决?编译是一个非常漫长而耗时的过程......

编辑: - 这是一个稍微更详细的问题解释...说我有一个头文件Basic.h,它包含在许多其他文件中.分支1和分支2之间的Basic.h不同.

现在假设我已将分支1编译为build_branch1,将分支2编译为build_branch2.说我目前检查了分支2.现在我签出分支1并更改File1.cpp并重新编译.理想情况下,因为自上次编译它以来只有File1.cpp发生了变化,所以这是唯一应该重新编译的文件.

但是,由于Basic.h由于结帐而更改了时间戳,因此将重新编译包含Basic.h的所有文件.我想避免这种情况.

c c++ git makefile git-pull

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

C++中的长代理链

这绝对是主观的,但我想尽量避免它变得有争议.我认为如果人们适当地对待它可能是一个有趣的问题.

在我最近的几个项目中,我曾经实现过长代理链是常见的架构.

可能经常遇到双重委托链:

bool Exists = Env->FileSystem->FileExists( "foo.txt" );
Run Code Online (Sandbox Code Playgroud)

三重代表团并不罕见:

Env->Renderer->GetCanvas()->TextStr( ... );
Run Code Online (Sandbox Code Playgroud)

存在更高级别的代表团,但实际上很少.

在上述示例中,不执行NULL运行时检查,因为所使用的对象始终存在并且对于程序的运行是至关重要的并且在执行开始时被显式构造.基本上我曾经在这些情况下拆分委托链:

1)我重用通过委托链获得的对象:

{ // make C invisible to the parent scope
   clCanvas* C = Env->Renderer->GetCanvas();
   C->TextStr( ... );
   C->TextStr( ... );
   C->TextStr( ... );
}
Run Code Online (Sandbox Code Playgroud)

2)在使用之前,应该检查委托链中间某处的中间对象是否为NULL.例如.

clCanvas* C = Env->Renderer->GetCanvas();

if ( C ) C->TextStr( ... );
Run Code Online (Sandbox Code Playgroud)

我曾经通过提供代理对象来对抗案例(2),以便可以在非NULL对象上调用方法,从而产生empty结果.

我的问题是:

  1. 案例(1)或(2)是模式还是反模式?
  2. 有没有更好的方法来处理C++中的长委托链?

以下是我在做出选择时考虑的一些优缺点:

优点:

  • 它非常具有描述性:从一行代码中可以清楚地看出对象来自哪里
  • 长代表团看起来不错

缺点:

  • 交互式调试很费力,因为很难检查委托链中的多个临时对象

我想知道长代表团的其他利弊.请根据有争议的观点提出你的推理和投票,而不是你对它的看法.

c++ design-patterns delegation method-chaining chaining

22
推荐指数
3
解决办法
1772
查看次数

如何在Android中使用std :: stoul和std :: stoull?

C++ 11有两个新的字符串转换函数为unsigned longlong long:std::stoul()std::stoll().

最近的Android NDK r9引入了Clang 3.3编译器,据称它是完整的C++ 11功能.NDK内部有这些函数的原型,但是我不能使用它们.

使用它们需要做什么?

PS我已经做到了LOCAL_CPPFLAGS += -std=c++11

c++ android android-ndk c++11

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

在本地时区以YYYY-MM-DD格式检索git日志

要获得YYYY-MM-DD格式的日期git log --date=iso被使用.使用在当地时区强制日期git log --date=local.

我试图结合两种选择,但这是一次失败.那么有一种方法(git log命令)来获取YYYY-MM-DD我当地时区的日期(格式)吗?

git

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

std :: swap对整数类型的速度有多快?

STL实现了一个通用std::swap函数来交换2个值.它可以通过以下方式呈现:

template <class T> void swap (T& a, T& b)
{
  T c(std::move(a));
  a=std::move(b);
  b=std::move(c);
}
Run Code Online (Sandbox Code Playgroud)

但是,有一个XOR交换算法来交换2个整数(http://en.wikipedia.org/wiki/XOR_swap_algorithm):

void swap_u( size_t& x, size_t& y )
{
   x = x^y;
   y = x^y;
   x = x^y;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 现在是优化(开启x86还是arm)?
  2. C++标准是否支持这种优化?
  3. 是否有任何真正的STL实现在野外具有std::swap整数专业化?

c++ performance swap stl c++11

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

如何获取试图从onBind函数绑定我的服务的应用程序包名称或UID?

我在应用程序中有一个服务,我可以从不同的应用程序中获得此服务.当尝试绑定此服务的应用程序时,我想知道哪个应用程序试图在onBind函数中绑定我的服务,但我无法在onBind函数中获取此应用程序的包名称或UID.

是否可以获取试图在onBind函数中绑定我的服务的应用程序名称或UID?

android

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

Clang 3.3和C++ 14支持?

Clang 3.3支持一些C++ 14功能,如成员初始化器和聚合.但是,即使使用-std=c++11switch ,我也无法编译此代码.

struct A
{
   struct X { int a, b; };
   X x = { 1, 2 };
   int n;
};

A a = {{10}, 5};
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c++ clang c++11 c++14

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

在C++中从文本文件中读取数值的最快方法(在这种情况下为double)

目前,我的代码就是这样:

void ReadFile(double Cst[][1000], char* FileName, int height)

FILE* ifp;
double value;
int nRead = 0;
int mRead = 0;

//open the file, check if successful
ifp = fopen( FileName, "r" );
if (ifp==NULL){
    ...
}


for (nRead = 0; nRead < height; nRead++){
    for (mRead = 0; mRead < 1000; mRead++){
        fscanf(ifp, "%le",&value);
        Cst[nRead][mRead]=value;
    }
}

fclose(ifp);
Run Code Online (Sandbox Code Playgroud)

我可以改变什么来使它尽可能快?

c++

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

使用glTexImage2D在OpenGL中更新纹理

glTexImage2DglTexSubImage2D像素的缓冲区传递到纹理的唯一途径?

目前我在设置函数glTexImage2D中使用null作为缓冲区,然后在渲染循环中,我在每次迭代时使用新的缓冲区数据调用glTexSubImage2D.

但是知道纹理不会改变任何属性(如尺寸),是否有更有效的方法将实际像素数据传递给渲染纹理?

textures glteximage2d

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

SensorEvent.timestamp不一致

我的应用程序使用android 4.4.X中引入的步进检测器传感器API在后台步骤计数中执行.

我的应用程序必须知道每个步骤事件产生的确切时间(至少准确度为一秒).

因为我执行传感器批处理,所以onSensorChanged(SensorEvent event)调用的时间与步骤事件发生的时间不同 - 我必须使用该event.timestamp字段来获取事件时间.

有关此字段的文档是:

事件发生的纳秒时间

问题:

在某些设备(例如Moto X 2013)中,这个时间戳似乎是自启动以来的纳秒时间,而在某些设备(例如Nexus 5)中,它实际上以纳秒为单位返回通用系统时间System.currentTimeMills() / 1000.

据我所知,关于这一点已经存在一个陈旧的问题,但是由于引入了传感器批处理 - 使用该字段来了解事件时间变得非常重要,并且不可能再依赖于System.currentTimeMills()

我的问题:

我该怎么做才能在所有设备上始终以系统毫秒为单位获取事件时间?

android nanotime android-sensors

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