小编Ed *_*rbu的帖子

恢复git-svn克隆

我开始使用git-svn的克隆操作克隆SVN存储库.导入大约6个小时后(这是一个很大的回购),我的电脑就睡着了.有没有办法在不重做所有初始工作的情况下恢复操作?

git git-svn

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

Visual Studio 2012 Update 2中的std :: async衰减(丢失)右值引用.任何变通方法?

考虑以下代码:

#include <memory>
#include <future>

using namespace std;

template <typename T, typename Work>
void Test2(future<T> f, Work w)
{
  async([](future<T> && f, Work w)
                      {}, move(f), move(w));
}

int main()
{
  future<int> x = std::async([]()->int{
        std::this_thread::sleep_for(std::chrono::microseconds(200));
        return 10;
    });

  Test2(std::move(x), [](int x){});
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上编译错误导致失败:

错误1错误C2664:'void Test2 :::: operator()(std :: future <_Ty> &&,Work)const':无法将参数1从'std :: future <_Ty>'转换为'std :: future <_Ty> &&'c:\ program files(x86)\ microsoft visual studio 11.0\vc\include\xrefwrap 98 1 ConsoleApplication6

GCC 4.7.2编译得很好 http://ideone.com/KhMiV6

在我继续并在Microsoft Connect上报告之前:

1)这是VC11的一个错误还是这个实际的标准行为?

2)有没有人知道这方面的解决方法?

编辑:我在这里的Microsoft Connect …

c++ future visual-c++ c++11 visual-c++-2012

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

需要用于快速存储和检索(搜索)集合和子集的算法

我需要一种存储任意大小的集合的方法,以便以后快速查询.我将需要查询已存储的子集或集合的结果数据结构.

===后来的编辑:为了澄清,这个问题的一个被接受的答案将是一个研究的链接,该研究提出了解决这个问题的方法.我不希望人们自己开发算法.我一直在研究这里发现的元组聚类算法,但它并不完全是我想要的,因为从我的理解它将元组"聚类"成更简单,离散/近似的形式并失去原始元组.

现在,一个更简单的例子:

[alpha, beta, gamma, delta] [alpha, epsilon, delta] [gamma, niu, omega] [omega, beta]

查询:

[alpha, delta]

结果:

[alpha, beta, gama, delta] [alpha, epsilon, delta]

所以set元素就是那些独特的,无关的元素.忘记类型和价值观.可以在它们之间测试元素是否相等,就是这样.我正在寻找一种既定的算法(可能有一个名称和科学论文),而不仅仅是现场创建一个.

==原始示例:

例如,假设数据库包含这些集合

[A1, B1, C1, D1], [A2, B2, C1], [A3, D3], [A1, D3, C1] 
Run Code Online (Sandbox Code Playgroud)

如果我[A1, C1]用作查询,则应返回这两个集合:

[A1, B1, C1, D1], [A1, D3, C1]
Run Code Online (Sandbox Code Playgroud)

例2:

数据库:

[Gasoline amount: 5L, Distance to Berlin: 240km, car paint: red]
[Distance to Berlin: 240km, car paint: blue, number of car seats: 2]
[number of …
Run Code Online (Sandbox Code Playgroud)

database algorithm search graph data-partitioning

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

修复了使用VSync打开时间步长的问题

在我实现的2D OpenGL引擎中,我有一个固定的时间步长,如着名的修复你的时间步骤文章,以及混合.

我有一个垂直移动的测试对象(y轴).运动中有口吃(预编程运动,而非用户输入).这意味着对象不能在屏幕上平滑移动.

请参阅我正在链接的未压缩视频:LINK

游戏帧率保持在60fps(Vsync从Nvidia驱动程序打开)

游戏逻辑以每秒固定的20次更新/滴答更新,由我设置.这个是正常的.对象每次更新移动50个像素.

然而,屏幕上的移动是严重的口吃.

编辑:我注意到通过逐帧踩踏录制的视频,口吃是由一个帧显示两次引起的.

EDIT2:在任务管理器中将应用程序优先级设置为Realtime,完全消除了口吃!然而,这显然不是解决方案.

下面是不同时间的对象y移动增量,VSync关闭第一列是自上一帧以来经过的时间,以微秒为单位(ex 4403)第二列是自上一帧以来对象y轴上的移动.实际上,对象每秒移动1000个像素,下面的日志确认了它.

time since last frame: 4403    ypos delta since last frame: 4.403015
time since last frame: 3807    ypos delta since last frame: 3.806976
time since last frame: 3716    ypos delta since last frame: 3.716003
time since last frame: 3859    ypos delta since last frame: 3.859009
time since last frame: 4398    ypos delta since last frame: 4.398010
time since last frame: 8961    ypos delta since last frame: …
Run Code Online (Sandbox Code Playgroud)

c++ opengl game-engine visual-c++ c++11

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

ExternalProject_Add不会安装项目的Release配置

编辑:我发现了一个可能的原因,但我不明白为什么:Project(Externals)删除下面脚本中的最后一行修复了我的问题.所以现在的问题为什么?

cmake_minimum_required(VERSION 2.8)

include(ExternalProject)

MACRO(EXTERNAL_DEF aNewTargetName aPathToSource)
  ExternalProject_Add(
    ${aNewTargetName}
    PREFIX ${CMAKE_INSTALL_PREFIX}
    SOURCE_DIR ${aPathToSource}

    TMP_DIR      "${CMAKE_INSTALL_PREFIX}/tmp/${CMAKE_BUILD_TYPE}"
    DOWNLOAD_DIR "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}"
    BINARY_DIR   "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-build"
    STAMP_DIR    "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-stamp"
    CMAKE_ARGS
      -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
      -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
      --debug-output
    BUILD_COMMAND "${CMAKE_COMMAND}" --build
      "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-build" --config "${CMAKE_BUILD_TYPE}"
    #INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
    )
ENDMACRO()

get_filename_component(zlibAbsPath "./zlib" ABSOLUTE)
EXTERNAL_DEF(zlib_external ${zlibAbsPath})
Project(Externals)
Run Code Online (Sandbox Code Playgroud)

我在上面的CMakeLists.txt文件中调用cmake,CMAKE_INSTALL_PREFIX设置为让我们说"d:\ externals"CMAKE_BUILD_TYPE设置为"Release"

期望: 我希望只构建Release配置.在它构建之后,我希望它能够被安装D:\externals\bin\zlib.dll.

问题: 实际上,ExternalProject_Add构建了DebugRelease,并安装了dll的调试版本D:\externals\bin\zlibd.dll

我的构建脚本不正确吗?我究竟做错了什么?

编辑:更多信息.我刚注意到 在生成的D:\ externals\src\Release\zlib_external-build\zlib.sln中,根本没有选择INSTALL目标进行构建.如果我检查它是否为Release配置构建,然后点击visual studio中的"Build",则INSTALL目标会构建并安装我期望它们的文件.我不知道是怎么回事...

cmake external-project

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

英特尔 TBB 中的任务延续

TBB中有类似PPL的任务延续的东西吗?我知道手动分配tbb::tasks 和手动分配连续任务以及手动管理它们的引用计数的低级 TBB 方法:

struct FibContinuation: public task {
    long* const sum;
    long x, y;
    FibContinuation( long* sum_ ) : sum(sum_) {}
    task* execute() {
        *sum = x+y;
        return NULL;
    }
};

struct FibTask: public task {
    const long n;
    long* const sum;
    FibTask( long n_, long* sum_ ) :
        n(n_), sum(sum_)
    {}
    task* execute() {
        if( n<CutOff ) {
            *sum = SerialFib(n);
            return NULL;
        } else {
            // long x, y; This line removed 
            FibContinuation& c = …
Run Code Online (Sandbox Code Playgroud)

c++ tbb c++11 ppl

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

获取最大的无符号整数类型

我需要一种方法来获得目标编译器体系结构上可用的最大类型.我希望有一个定义:

#if defined PLATFORM_32BIT
#define LARGEST_UNSIGNED_TYPE uint32_t
#elseif defined PLATFORM_64BIT
#define LARGEST_UNSIGNED_TYPE uint64_t
#endif
Run Code Online (Sandbox Code Playgroud)

是否有标准的C++方法来实现这一目标?或者我需要自己动手?

c++ c++11

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

如何创建一个不需要调用者将参数计数传递给它的可变参数函数?

编辑:我很高兴看到有一个C++ 11的解决方案.无论如何,还没有人为C++ 98提出答案.所以,即使我已经接受了答案,问题仍然存在.

我们假设您在命名空间中有一个函数:

namespace Math
{
  int Sum(<params>);
}
Run Code Online (Sandbox Code Playgroud)

你如何实现这个函数Math :: Sum,使得调用者可以使用任意数量的参数调用它,但调用者也不需要传递参数的数量.呼叫者还需要在呼叫站点完全限定它.例: Math::Sum(2, 4, 6, 8, 10, 12)

c++ visual-c++ c++11

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

在六边形网格上:选择选定点的给定半径内的切片.

我正在使用六边形瓷砖地图开发一个简单的2D棋盘游戏,我已经阅读了几篇文章(包括gamedev one,每次有关于六边形瓷砖的问题时都会链接)关于如何在屏幕上绘制六边形以及如何管理运动(虽然我以前做过很多).我的主要问题是根据给定的半径找到相邻的瓷砖.

这就是我的地图系统的工作方式:

(0,0) (0,1) (0,2) (0,3) (0,4)    
   (1,0) (1,1) (1,2) (1,3) (1,4)   
(2,0) (2,1) (2,2) (2,3) (2,4)  
   (3,0) (3,1) (3,2) (3,3) (3,4) etc...
Run Code Online (Sandbox Code Playgroud)

我正在努力的事实是我不能通过使用for(x-range;x+range;x++); for(y-range;y+range;y++);来选择相邻的瓷砖,因为它选择了不需要的瓷砖(在我给出的示例中,选择(1,1)瓷砖并给出1的范围也会给出我是(3,0)瓷砖(我实际需要的是(0,1)(0,2)(1,0)(1,2)(2,1)(2,2)),这是有点与瓷砖相邻(因为数组的结构方式),但它并不是我想要选择的东西.我可以强制它,但这不会很美,可能不会覆盖'选择半径的东西".

有人能指出我在正确的方向吗?

c++ tile hexagonal-tiles

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