我开始使用git-svn的克隆操作克隆SVN存储库.导入大约6个小时后(这是一个很大的回购),我的电脑就睡着了.有没有办法在不重做所有初始工作的情况下恢复操作?
考虑以下代码:
#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)有没有人知道这方面的解决方法?
我需要一种存储任意大小的集合的方法,以便以后快速查询.我将需要查询已存储的子集或集合的结果数据结构.
===后来的编辑:为了澄清,这个问题的一个被接受的答案将是一个研究的链接,该研究提出了解决这个问题的方法.我不希望人们自己开发算法.我一直在研究这里发现的元组聚类算法,但它并不完全是我想要的,因为从我的理解它将元组"聚类"成更简单,离散/近似的形式并失去原始元组.
现在,一个更简单的例子:
[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) 在我实现的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) 编辑:我发现了一个可能的原因,但我不明白为什么: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构建了Debug和Release,并安装了dll的调试版本D:\externals\bin\zlibd.dll
我的构建脚本不正确吗?我究竟做错了什么?
编辑:更多信息.我刚注意到 在生成的D:\ externals\src\Release\zlib_external-build\zlib.sln中,根本没有选择INSTALL目标进行构建.如果我检查它是否为Release配置构建,然后点击visual studio中的"Build",则INSTALL目标会构建并安装我期望它们的文件.我不知道是怎么回事...
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) 我需要一种方法来获得目标编译器体系结构上可用的最大类型.我希望有一个定义:
#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++ 11的解决方案.无论如何,还没有人为C++ 98提出答案.所以,即使我已经接受了答案,问题仍然存在.
我们假设您在命名空间中有一个函数:
namespace Math
{
int Sum(<params>);
}
Run Code Online (Sandbox Code Playgroud)
你如何实现这个函数Math :: Sum,使得调用者可以使用任意数量的参数调用它,但调用者也不需要传递参数的数量.呼叫者还需要在呼叫站点完全限定它.例:
Math::Sum(2, 4, 6, 8, 10, 12)
我正在使用六边形瓷砖地图开发一个简单的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)),这是有点与瓷砖相邻(因为数组的结构方式),但它并不是我想要选择的东西.我可以强制它,但这不会很美,可能不会覆盖'选择半径的东西".
有人能指出我在正确的方向吗?