所以我在我的C++应用程序中使用这个C库,其中一个函数返回一个void*.现在我对纯C来说并不是最敏锐的,但是听说过一个void*可以被投射到几乎任何其他的*类型.我也知道我希望在这个函数的某个地方有一个浮点数.
所以我将void*转换为float*并取消引用float*,崩溃.该死的!我调试代码并在gdb中让它评估(float)voidPtr和低,并看到值是我期望和需要的!
但是等等,在编译期间不可能一样.如果我写float number = (float)voidPtr;它不编译,这是可以理解的.
所以现在的问题是,如何让我的浮动脱离这个虚弱的空虚*?
编辑:感谢H2CO3,这已经解决了,但我看到很多答案和评论出现并且不再相信我可以在gdb中做(浮动)voidPtr.这是截图.

我目前正在使用C#/ XNA开发2D游戏.游戏的核心功能是具有截然不同的行为的子弹(这将是一种子弹地狱游戏).更新所有项目符号可能需要相当长的时间,因为它们的行为可能无限复杂.而且所有人都必须进行1次碰撞检查.最初我只是将它们存储在List中并更新并绘制所有这些,从每个帧中删除列表中的非活动项目符号.然而,当屏幕上有8k子弹时,这很快被证明会减慢游戏速度,所以我决定实现多线程并使用LINQ来帮助提高性能.
事情是它仍在减慢约16k子弹.我被告知如果我做得对,我可以获得高达700万的活跃子弹,所以我对16k不满意......
我还能做些什么来提高性能吗?
代码前的附加信息:我的子弹有速度,方向,角速度,加速度,速度限制和行为的字段.提到的唯一特殊事情是行为.它可以随时修改任何项目符号字段或产生更多项目符号甚至将其自身植入其中,因此我很难应用数据驱动的解决方案并只将所有这些字段存储在数组中而不是列出子弹.
internal class BulletManager : GameComponent
{
public static float CurrentDrawDepth = .82f;
private readonly List<Bullet> _bullets = new List<Bullet>();
private readonly int _processorCount;
private int _counter;
private readonly Task[] _tasks;
public BulletManager(Game game)
: base(game)
{
_processorCount = VariableProvider.ProcessorCount;
_tasks = new Task[_processorCount];
}
public void ClearAllBullets()
{
_bullets.Clear();
}
public void AddBullet(Bullet bullet)
{
_bullets.Add(bullet);
}
public override void Update(GameTime gameTime)
{
if (StateManager.GameState != GameStates.Ingame &&
(StateManager.GameState != GameStates.Editor || EngineStates.GameStates != EEngineStates.Running)) …Run Code Online (Sandbox Code Playgroud) 鉴于此示例类:
template<typename T>
class ExampleContainer
{
private:
std::map<T, int> _objects;
int _sum;
public:
ExampleContainer()
: _objects(), _sum(0)
{
}
void Add(T obj, int add)
{
_objects[obj] = add; // yes this is bad, but it's an example.
_sum += add;
}
};
Run Code Online (Sandbox Code Playgroud)
需要什么才能像这样使用它:
ExampleContainer<char*> _rarities =
{
{ "One", 600 },
{ "Two", 200 },
{ "Three", 50 },
{ "Four", 10 },
{ "Five", 1 },
};
Run Code Online (Sandbox Code Playgroud)
我知道它必须以某种方式可能,因为我可以初始化一个像这样的std :: map.
提前感谢您的任何答案.
标题似乎在描述我的问题方面做得很差;让我试着用一个简化的例子来解释它:
假设我有下表:
_______________________
|id|variant_id|attr_id|
|__|__________|_______|
|1 |15 |110 |
|2 |15 |110 |
|3 |20 |152 |
|4 |20 |110 |
|5 |21 |110 |
|__|__________|_______|
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是一个查询,它选择variant_id和attr_id列的组合出现不止一次的所有行。基本上在这个例子中,它应该选择第 1 行和第 2 行,因为它们的组合variant_id和attr_id出现在表中不止一次。
那可能吗?试图想出一个可能的解决方案,我的头很痛。
我不能为我的生活找出编译器想要的东西.
任何有编译器消息经验的人都能帮我解读它想要的东西吗?我甚至无法提供代码位,因为我不知道最近会发生什么.
我正在使用g ++ - 4.7和-std = c ++ 11
它似乎抱怨SimpleMapSquare和它是一个分配器的东西?这不是那样的.SimpleMapSquare定义为:
#pragma once
namespace BlackDragonEngine
{
struct SimpleMapSquare
{
int TileID;
};
}
Run Code Online (Sandbox Code Playgroud)
我昨天写了大约400多行模板化代码,并试图在我的主应用程序中包含它的标题并且繁荣发生这种情况......
我甚至不知道从哪里开始......请帮助.
编辑:在我的项目中搜索"vector <"返回:http://i.imgur.com/g8L1l.png
我扩展了文件(我昨天创建的文件)
我在没有测试的情况下编写了这么多代码的原因是因为我将我的引擎从C#转换为C++,所以逻辑方面已经是正确的,我无法测试不完整的代码.
编辑2:以下是"SimpleMapSquare" http://i.imgur.com/zedkh.png的所有用法
编辑3:
感谢康拉德我能够确定确切的行并找到错误...忽略上面的搜索,因为我忘了包含*.inl文件(模板代码实现所在的位置)
c++ ×3
2d ×1
c ×1
c# ×1
c++11 ×1
casting ×1
collections ×1
g++ ×1
performance ×1
postgresql ×1
sql ×1
std ×1
void ×1
xna ×1