我有一些关于如何在VC 2010 C++项目中组织源文件的问题.包含的默认过滤器最终不够,我将会有很多.cpp和.hpp文件,所以它会变得很乱.我想在项目的根目录下创建一个名为"source"的文件夹,然后在"source"中为我想要使用的各种源文件类别创建文件夹.当我右键单击解决方案时,我只能选择添加过滤器,而不是文件夹.我可以在Windows资源管理器中手动创建文件夹,然后包含它们,但然后我失去了添加过滤器的能力.有没有办法添加新文件夹(不使用Windows资源管理器),仍然使用过滤器?
另外,有没有类似于$(CURDIR)的东西,我可以用来包含源文件夹而不需要绝对路径?
在此先感谢您的帮助
假设我有两个集合如下:
Collection1:"A1""A1""M1""M2"
Collection2:"M2""M3""M1""A1""A1""A2"
所有值都是字符串值.我想知道Collection1中的所有元素是否都包含在Collection2中,但我不保证顺序,并且一个集合可能有多个具有相同值的条目.在这种情况下,Collection2包含Collection1,因为Collection2有两个A1,M1和M2.这是显而易见的方式:排序集合并在找到匹配时弹出值,但我想知道是否有更快更有效的方法来执行此操作.再次使用初始集合,我无法保证订单或给定值出现的次数
编辑:将设置更改为集合只是为了清除这些不是集合,因为它们可以包含重复值
我找不到如何做到这一点的实例,所以我希望有人可以帮助我.我在类中定义了如下地图:
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错误的删除事件代码.现在修复了.
我需要提交一个赋值,但我只想包含我实际使用的boost头文件(我使用了boost :: shared_ptr和boost :: function).我尝试手动这样做,但我缺少一些头文件,每次我去添加它们,事实证明我错过了更多.有没有一种快速简便的方法可以找出我真正需要的标题?
谢谢
可能重复:
如何在Java中将日期增加一天?
我有一个现有的日期对象,我想增加一天,同时保持每个其他字段相同.我遇到的每个例子都是小时/分钟/秒,或者您必须创建一个新的日期对象并将字段转移过来.有没有办法可以将日期字段提前1?
谢谢
编辑:对不起我并不是说每天增加一天的价值,我的意思是提前一天提前1
我已经阅读了如何在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的好例子已经变得非常棘手了
提前致谢
我有一个有两个函数的类,这两个函数都使用不同的参数集,并且这两个函数都有默认参数,如下所示:
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)
问题是我真的不知道如何同时使用它们.我想避免更改我的基类函数定义.
以前做过这件事,或知道如何做到这一点的人可以帮助我吗?
提前致谢
我很好奇以下情况是否安全.
我有以下类定义:
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) 我确信这对我来说很简单,但我无法弄清楚为什么我的编译器认为我的一个类是抽象的.情况如下:
我有一个像这样的抽象基类:
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 …
我正在为我正在制作的游戏开发一些工具.这些工具可以作为使编辑游戏文件更容易的前端.其中一些文件是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 /编辑文件.我的编辑需要能够:
为此,我开始编写自己的解析器,查找类关键字以及何时使用这些记录的类来构造对象.这适用于简单的数据,但是当我开始使用具有复杂构造函数的类(列表,映射等)时,正确解析变得越来越困难.
在搜索之后,我发现IronPython可以很容易地解析python文件,所以这就是我要做的事情.一旦我构建了抽象语法树,我就使用PythonWalkers来识别和查找我需要的所有信息.这非常适合读取数据,但我没有看到将更新的数据推送到Python文件的简单方法.据我所知,没有办法改变AST中的值,更不用说将AST转换回脚本文件了.如果我错了,我会喜欢有人告诉我如何做到这一点.我现在需要做的是搜索文件直到找到正确的行,然后尝试将数据推送到构造函数中,确保正确的排序.
我有没有看到一些明显的解决方案?我应该继续处理我的解析器并使其支持更复杂的数据类型吗?我真的虽然我使用了IronPython解析器,但我没想到将修改后的数据推回文件是多么棘手.
任何建议,将不胜感激