小编Tra*_*isG的帖子

将文件添加到subversion,同时自动添加父目录节点(如果尚未添加)

当我想在目录中添加文件时使用

svn add directory/file.extension
Run Code Online (Sandbox Code Playgroud)

目录尚未添加,我收到一条错误消息,指出无法找到目录的节点,需要先添加.所以我能做到

svn add directory --depth=empty
svn add directory/file.extension
Run Code Online (Sandbox Code Playgroud)

我可以自动完成最后两个步骤吗?也许用svn add的拟合参数?

svn

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

分离轴定理:找出要使用的边法线

我正在使用这里描述的算法的实现:http://www.codezealot.org/archives/55

使用这个实现,当我想找到两个碰撞矩形的最小位移矢量时,算法有时会(在两种情况中的一种情况下准确)给出错误的"方向",其中一个矩形需要被推动才能获得远离它碰撞的矩形.它将产生与它应该进入的方向完全相反的方向.

这是因为(当然)矩形的两个相对边缘当然在数学上相似,因此产生相同的结果.

这是Java中算法的实现:

http://pastebin.com/fgAwBsGv

您可以假设Vector2f,Projection2D等正常运行并生成正确的值.顺便说说,

我正在使用左手法线,因为多边形是逆时针组装的.原则上,这应该足够了,因为左手法线总是指向多边形.问题在于,由于矩形的相对边缘的两个重叠将完全相同,因此算法将简单地使用第一个及其对应的轴.

谢谢你的帮助!

collision-detection

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

将void*铸造得更高的安全方法?

我有一个管理各种类型资源的泛型类,但由于我不想为每个T创建一个ResourceManager实例(因此每个类型T都有一个资源管理器),我必须制作ResourceManager类未知的T类型.

我这样做是通过保存void*指针的映射并将它们转换回所需的格式,如果有人从模板化的Load()方法请求某种类型的话.

template <typename T>
T* Load(const std::string &location)
{
    //do some stuff here

    //everybody take cover!!!
    return static_cast<T*>(m_resources[location]);
}
Run Code Online (Sandbox Code Playgroud)

我使用模板专门化向类中引入不同的Loaders:

template<>
AwesomeType* Load(const std::string &location)
{
    //etc.

    return static_cast<AwesomeType*>(m_resources[location]);
}
Run Code Online (Sandbox Code Playgroud)

我知道这很难看,但现在没办法解决.我可以在专门的Load方法内部引入静态映射,但是这样我就无法将资源的生命周期绑定到ResourceManager对象的生命周期,这是一个必不可少的特性.

但是因为这有点危险(因为那些void*指针可以是任何东西),我想至少在运行时检查转换是否会起作用,所以我可以在没有应用程序崩溃的情况下对它做出反应.

我怎样才能做到这一点?

c++ void-pointers

4
推荐指数
3
解决办法
1470
查看次数

遗传算法中的交叉方法

当阅读关于遗传算法的交叉部分时,书籍和论文通常指的是简单地交换要再现的两个所选候选者的数据中的比特的方法.

我还没有看到用于实际行业应用的实现遗传算法的实际代码,但我发现很难想象它足以在简单的数据类型上运行.

我总是想象遗传算法的各个阶段将在涉及复杂数学运算的复杂对象上执行,而不是仅仅在单个整数中交换一些位.

甚至维基百科也只是为交叉列出了这些类型的操作.

我错过了一些重要的东西,或者这些交叉方法真的是唯一使用的东西吗?

algorithm optimization search genetic-algorithm evolutionary-algorithm

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

首先找到二进制数"1"

可能重复:
有效的按位运算,用于计数位或查找右侧|最左侧的位

有没有一种快速的方法来找到(32位)二进制数中的前1?

例如,如果我的号码是00000000 00000000 00000000 10000000

我想计算值"7"(或"24",如果从另一侧读取),因为数字中的第一个零存储在右起第7位.

有没有比这更快的方法

int pos=0;
int number = 127; //binary from above
while ((number>>pos) > 0) { pos++; }
Run Code Online (Sandbox Code Playgroud)

也许是特定的x86汇编指令?

c algorithm x86 assembly

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

"模板多态"在调用基类型的模板化参数的函数时,使用派生类型?

我有一个模板类:

template <class T>
class TemplateClass
{
   //irrelevant what this class does
}
Run Code Online (Sandbox Code Playgroud)

还有两个类,一个基类和一个类,它们来源于它:

class Base
{
    //does whatever
}

class Derived : public Base
{
}
Run Code Online (Sandbox Code Playgroud)

现在我想组装一个函数,它可以处理模板化类型Base*的TemplateClass以及模板化类型Derived*的TemplateClass,而不必为两种类型分别实现该函数.

在代码中,这是我希望能够做到的:

void DoSomething(const TemplateClass<Base *> &tc)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

以及代码中的其他地方:

TemplateClass<Base *> a;
TemplateClass<Derived *> b;

DoSomething(a); //Works
DoSomething(b); //Doesn't work, but I'd like it to work
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个,而不必手动重载DoSomething for Derived*?

c++ templates

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

自动插入空基本方法体

如果我有一个带有一些抽象方法的基类,有没有办法让Visual Studio自动插入需要在新派生类中实现的方法的空体(就像你可以使用Eclipse和Java)?

像这样:

public abstract class foo
{
    public virtual void bar()
    {
       doSomething();
    }
}

public class Derived : foo
{
    //somehow tell VS to insert this without me having to write everything
    public override void bar()
    {
       base.bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010

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

线程之间是否共享了作用域静态变量?

例如,以下代码是否可以为其中一个线程打印"3"?

int foo()
{
   static int a = 1;
   return ++a;
}

void thread1()
{
   cout<<foo()<<endl;
}

void thread2()
{
   cout<<foo()<<endl;
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是C++ 98

c++ multithreading

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

在SSE寄存器中"扩展"数据类型大小

我正在使用VS2005(在工作中)并且需要一个执行以下操作的SSE内在函数:

我有一个预先存在的__m128i n填充16位整数a_1,a_2,....,a_8.

由于我现在想要做的一些计算需要32而不是16位,我想从n中提取两组四位16位整数并将它们分成两个分别__m128i包含a_1,...,a_4和的s a_5,...,a_8.

我可以使用各种_mm_set内在函数手动执行此操作,但是那些会导致八次mov装配,我希望有更快的方法来执行此操作.

c sse simd

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

cds库:michael_deque在推回派生类型的自定义类型时导致崩溃(仅在发布模式下)

我正在使用带有默认优化设置(/ O2)的VS2012,此问题仅存在于发布模式中.

我有一些代码使用michael_deque(使用标准GC)和指向(抽象)类型的指针T.
当我尝试将指针推回到派生自的类型时,T应用程序在退出push_back()函数时崩溃michael_deque.

问题似乎完全取决于这种特定类型T,因为编写一个虚拟类foo,在类中派生它bar(并在构造函数中打印一些东西以避免它被优化掉),然后再推回到new bar()michael_deque不会导致崩溃.

T有问题的课程是这样的:

class Task
{
public:
    Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter) {};
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
    virtual ~Task() = 0 {};

    virtual void execute() final
    {
        this->doActualWork();
        unfinishedTasks--;
    }

    virtual void doActualWork() = 0;
public:
    unsigned int taskID;    //ID of this task
    unsigned int parentID;  //ID of the parent of …
Run Code Online (Sandbox Code Playgroud)

c++ libcds

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