小编Meg*_*ron的帖子

VC2010 C++ - 组织源文件

我有一些关于如何在VC 2010 C++项目中组织源文件的问题.包含的默认过滤器最终不够,我将会有很多.cpp和.hpp文件,所以它会变得很乱.我想在项目的根目录下创建一个名为"source"的文件夹,然后在"source"中为我想要使用的各种源文件类别创建文件夹.当我右键单击解决方案时,我只能选择添加过滤器,而不是文件夹.我可以在Windows资源管理器中手动创建文件夹,然后包含它们,但然后我失去了添加过滤器的能力.有没有办法添加新文件夹(不使用Windows资源管理器),仍然使用过滤器?

另外,有没有类似于$(CURDIR)的东西,我可以用来包含源文件夹而不需要绝对路径?

在此先感谢您的帮助

visual-studio-2010 visual-studio

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

检查一个值集合是否包含另一个值

假设我有两个集合如下:

Collection1:"A1""A1""M1""M2"

Collection2:"M2""M3""M1""A1""A1""A2"

所有值都是字符串值.我想知道Collection1中的所有元素是否都包含在Collection2中,但我不保证顺序,并且一个集合可能有多个具有相同值的条目.在这种情况下,Collection2包含Collection1,因为Collection2有两个A1,M1和M2.这是显而易见的方式:排序集合并在找到匹配时弹出值,但我想知道是否有更快更有效的方法来执行此操作.再次使用初始集合,我无法保证订单或给定值出现的次数

编辑:将设置更改为集合只是为了清除这些不是集合,因为它们可以包含重复值

c#

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

带删除的C++ map迭代

我找不到如何做到这一点的实例,所以我希望有人可以帮助我.我在类中定义了如下地图:

std::map<std::string, TranslationFinished> translationEvents;
Run Code Online (Sandbox Code Playgroud)

TranslationFinished是一个boost :: function.我有一个方法作为我的类的一部分,迭代遍历此映射,调用每个函数,如下所示:

void BaseSprite::DispatchTranslationEvents()
{
    for(auto it = translationEvents.begin(); it != translationEvents.end(); ++it)
    {
        it->second(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,被调用的函数可以it->second(this);使用以下函数从translationEvents映射(通常是自身)中删除元素:

bool BaseSprite::RemoveTranslationEvent(const std::string &index)
{
    bool removed = false;
    auto it = translationEvents.find(index);
    if (it != translationEvents.end())
    {
        translationEvents.erase(it);
        removed = true;
    }
    return removed;
}
Run Code Online (Sandbox Code Playgroud)

执行此操作会导致调试断言在DispatchTranslationEvents()尝试递增迭代器时失败.有没有办法安全地遍历地图,迭代期间函数调用可能会从地图中删除元素?

提前致谢

编辑:意外地C/Pd错误的删除事件代码.现在修复了.

c++ iteration map c++11

13
推荐指数
3
解决办法
4781
查看次数

只获得必要的标题

我需要提交一个赋值,但我只想包含我实际使用的boost头文件(我使用了boost :: shared_ptr和boost :: function).我尝试手动这样做,但我缺少一些头文件,每次我去添加它们,事实证明我错过了更多.有没有一种快速简便的方法可以找出我真正需要的标题?

谢谢

c++ boost

10
推荐指数
1
解决办法
2429
查看次数

将现有日期增加1天

可能重复:
如何在Java中将日期增加一天?

我有一个现有的日期对象,我想增加一天,同时保持每个其他字段相同.我遇到的每个例子都是小时/分钟/秒,或者您必须创建一个新的日期对象并将字段转移过来.有没有办法可以将日期字段提前1?

谢谢

编辑:对不起我并不是说每天增加一天的价值,我的意思是提前一天提前1

java date

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

提升Python和shared_ptr的向量

我已经阅读了如何在boost python中将普通向量暴露给python,但我想知道如何公开和使用向量.例如,我有一个shared_ptrs向量,如下所示:

std::vector<shared_ptr<StatusEffect> > Effects;
Run Code Online (Sandbox Code Playgroud)

基于暴露向量的材料,我应该能够暴露这种类.我想知道的是我怎样才能真正添加​​它?如何创建实例,shared_ptr<StatusEffect>因为我无权访问new,而shared_ptr可以指向多个派生类型,这使得为每个类添加静态创建方法有点乏味.

有没有人有一些指示或可以建议如何做到这一点?为我想做的事情找到boost :: python的好例子已经变得非常棘手了

提前致谢

c++ boost-python

7
推荐指数
1
解决办法
915
查看次数

Boost Python - 带有默认参数问题的重载函数

我有一个有两个函数的类,这两个函数都使用不同的参数集,并且这两个函数都有默认参数,如下所示:

void PlaySound(const std::string &soundName, int channel = 0, bool UseStoredPath = true);

void PlaySound(FMOD::Sound* sound, int channel = 0);
Run Code Online (Sandbox Code Playgroud)

我已经在这里找到了如何从教程中进行默认参数重载

http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/overloads.html

以及如何在这里采取不同参数类型的函数重载

http://boost.2283326.n4.nabble.com/Boost-Python-def-and-member-function-overloads-td2659648.html

我最终做了这样的事......

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(PlaySoundFromFile, Engine::PlaySound, 1, 3)
BOOST_PYTHON_MODULE(EngineModule)
{
    class_<Engine>("Engine")
        //Sound
        .def("PlaySound", static_cast< void(Engine::*)(std::string, int, bool)>(&Engine::PlaySound));
}
Run Code Online (Sandbox Code Playgroud)

问题是我真的不知道如何同时使用它们.我想避免更改我的基类函数定义.

以前做过这件事,或知道如何做到这一点的人可以帮助我吗?

提前致谢

c++ boost boost-python

7
推荐指数
1
解决办法
7970
查看次数

在集合中修改对象的可变成员是否安全?

我很好奇以下情况是否安全.

我有以下类定义:

class ActiveStatusEffect
{
public:
    StatusEffect* effect;
    mutable int ReminaingTurns;
    ActiveStatusEffect() : ReminaingTurns(0)
    {
    }
    //Other unimportant stuff down here
}
Run Code Online (Sandbox Code Playgroud)

然后我将一组这些存储在std :: set中,如下所示:

struct ASECmp
{
    bool operator ()(const StatusEffects::ActiveStatusEffect &eff1, const StatusEffects::ActiveStatusEffect &eff2)
    {
        return eff1.effect->GetPriority() < eff2.effect->GetPriority();
    }
};
std::set<StatusEffects::ActiveStatusEffect, ASECmp> ActiveStatusEffects;
Run Code Online (Sandbox Code Playgroud)

我将RemainingTurns标记为可变,因为我希望能够更改它而不必不断地擦除/插入到集合中.即

void BaseCharacter::Tick(Battles::BattleField &field, int ticks)
{
    for (auto effect = ActiveStatusEffects.begin(); effect != ActiveStatusEffects.end();)// ++index)
    {
           auto next = effect;
            ++next;
        if (effect->effect->HasFlag(StatusEffects::STATUS_FLAGS::TickEffect) && effect->ReminaingTurns > 0)
        {                       
            effect->effect->TickCharacter(*this, field, ticks);
            --effect->ReminaingTurns;

        } …
Run Code Online (Sandbox Code Playgroud)

c++ mutable set c++11

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

C++为什么我的课仍然是抽象的?

我确信这对我来说很简单,但我无法弄清楚为什么我的编译器认为我的一个类是抽象的.情况如下:

我有一个像这样的抽象基类:

class AnimatedDraw
{
public:
    virtual void Draw(sf::RenderWindow &window) = 0;
    virtual void Draw(sf::RenderWindow &window, sf::Shader shader) = 0;
    virtual void Update(sf::Clock &time) = 0;
};
Run Code Online (Sandbox Code Playgroud)

我继承了它:

class ScreenLayer : public AnimatedDraw
{
public:
    ScreenLayer(void);

    virtual void Draw(sf::RenderWindow &window);

    virtual void Draw(sf::RenderWindow &window, sf::Shader &shader);

    virtual void Update(sf::Clock &clock);

    ~ScreenLayer(void);
};
Run Code Online (Sandbox Code Playgroud)

作为参考,ScreenLayer.cpp文件如下:

#include "ScreenLayer.h"
ScreenLayer::ScreenLayer(void)
{
}
void ScreenLayer::Draw(sf::RenderWindow &window)
{
}
void ScreenLayer::Draw(sf::RenderWindow &window, sf::Shader &shader)
{
}
void ScreenLayer::Update(sf::Clock &clock)
{
}
ScreenLayer::~ScreenLayer(void)
{
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用我的派生类(即AnimatedDraw …

c++ abstract-class

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

从C#操作Python文件

我正在为我正在制作的游戏开发一些工具.这些工具可以作为使编辑游戏文件更容易的前端.其中一些文件是python脚本文件.例如,我有一个Items.py文件,其中包含以下内容(例如,最小化)

from ItemModule import *

import copy

class ScriptedItem(Item):
    def __init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower):
        Item.__init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower, Item.GetNextItemID())
    def Clone(self):
        return copy.deepcopy(self)

ItemLibrary.AddItem(ScriptedItem("Abounding Crystal", "A colourful crystal composed of many smaller crystals. It gives off a warm glow.", ItemType.SynthesisMaterial, ItemType.SynthesisMaterial, 0, ItemUsage.Unusable, 0, 50))
Run Code Online (Sandbox Code Playgroud)

正如我提到的,我想提供一个前端来编辑这个文件,而不需要编辑器直接知道python /编辑文件.我的编辑需要能够:

  1. 查找并列出所有类类型(在此示例中,它只是脚本项)
  2. 查找并列出所有创建的项目(在这种情况下,只有一个,Abounding Crystal).我需要找到类型(在本例中为ScriptBelptedItem)和所有参数值
  3. 允许编辑参数和创建/删除项目.

为此,我开始编写自己的解析器,查找类关键字以及何时使用这些记录的类来构造对象.这适用于简单的数据,但是当我开始使用具有复杂构造函数的类(列表,映射等)时,正确解析变得越来越困难.

在搜索之后,我发现IronPython可以很容易地解析python文件,所以这就是我要做的事情.一旦我构建了抽象语法树,我就使用PythonWalkers来识别和查找我需要的所有信息.这非常适合读取数据,但我没有看到将更新的数据推送到Python文件的简单方法.据我所知,没有办法改变AST中的值,更不用说将AST转换回脚本文件了.如果我错了,我会喜欢有人告诉我如何做到这一点.我现在需要做的是搜索文件直到找到正确的行,然后尝试将数据推送到构造函数中,确保正确的排序.

我有没有看到一些明显的解决方案?我应该继续处理我的解析器并使其支持更复杂的数据类型吗?我真的虽然我使用了IronPython解析器,但我没想到将修改后的数据推回文件是多么棘手.

任何建议,将不胜感激

c# python parsing ironpython

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