这是一个关于如何实现我最近遇到的一些需求的问题.我相信这有一个模式或共同的解决方案,即使我已经有一个,我渴望了解更多.
假设我正在一个游戏中工作,其中与游戏本身相关的所有实体都来自一个类"演员"(比如"障碍物","移动障碍物","射弹"和"大炮").在游戏中,所有这些实体都存储在std::vector<Actor *>向量中,以便可以遍历它们.
现在,让我们假设每个"演员"可以在每个回合"做"某事,让我们给他们一个方法"行动".Obstacle :: act会做的很少,Moving_obstacle :: act和Projectile :: act会移动它们,而"Cannon :: act"会创造一个新的射弹.有一个纯粹的虚函数Actor :: act是有意义的,所以我可以反过来做类似的事情:
std::vector<Actor *>::iterator b=myvectorofactors.begin(), e=myvectorofactors.end();
while(b < e)
{
*b->act();
b++;
}
Run Code Online (Sandbox Code Playgroud)
让他们都"行动".好吧,到目前为止一切都那么好......事实是,Cannon :: act可能有不同的原型或返回值(例如,存储生成的射弹和推进器将其推入矢量)并且这个"小"差异打破一切.
现在,我知道从某些角度来看,这些方法的重载都是完全不同的功能.我也知道,人们总是可以提前计划并以足够的远见来解决问题...或者可以解决问题.
在这种情况下,我只是为每个派生的Actor类使用了不同的唯一标识符,并使用它们转换为通信类并围绕它们进行工作.我相信我会再次遇到同样的问题,我很想知道一些入门级解决方案.
在此先感谢您的时间.
最近我的任务是做一些速度检查,所以我可以判断是否更快使用php/php-cli或c ++将一定数量的行插入数据库.
在开始之前,让我告诉你一些细节,以便一切都清楚:
所以,这是一个过程:
两个代码都完全按预期工作.以下是结果数字:
PHP:
C++:
php优于c ++,因为文件中的行增加...首先,我怀疑行拆分功能:php中的拆分是用"爆炸"完成的.该算法与c ++一样天真......容器通过引用传递,其内容随时更改.容器只遍历一次.我确保容器"reserve()"所有必要的空间(记住,我最终选择向量)是固定的.容器在main函数上创建,然后通过代码通过引用传递.它永远不会被清空或调整大小:只有它的内容会改变.
template<typename container> void explode(const std::string& p_string, const char p_delimiter, container& p_result)
{
auto it=p_result.begin();
std::string::const_iterator beg=p_string.begin(), end=p_string.end();
std::string temp;
while(beg < end)
{
if( (*beg)==p_delimiter)
{
*(it)=temp;
++it; …Run Code Online (Sandbox Code Playgroud) 我正在使用 Symfony2 并尝试将不同的对象集合序列化为 XML。为了简洁起见,我们假设我正在尝试列出和取消列出实体,这是我想要获得的 XML 结果:
<?xml version="1.0" encoding="UTF-8"?>
<r someattribute="value">
<data_list>
<item id="9" type="a"><![CDATA[list data 1]></item>
<item id="10" type="a"><![CDATA[list data 2]></item>
<item id="11" type="b"><![CDATA[list data 3]></item>
</data_list>
<data_unlist>
<uitem id="9" type="a" />
</data_unlist>
</r>
Run Code Online (Sandbox Code Playgroud)
以下是我的类:“item”节点的 Item、“uitem”节点的 Uitem 和 Model,以包含所有这些节点:
class Item
{
private $data=array();
public function getData() {return $this->data;}
public function __construct($id, $type, $value)
{
$this->data["@id"]=$id;
$this->data["@type"]=$type;
//How do I put $value as the node value????
}
}
class UItem
{
private $data=array();
public function getData() {return $this->data;}
public …Run Code Online (Sandbox Code Playgroud)