在考虑使用Lua协同程序的游戏的加载/保存机制时,出现了一个非常有趣的问题 - 你可以将正在运行的Lua状态转储到文件中吗?除了倾销环境的明显解决方案之外,还出现了两个值得注意的问题 - 转储函数(我认为更容易),以及转储协同程序.
后者让我想知道,是否有可能为了以后的恢复呼叫而转储正在运行的协程.它的用途相当广泛 - 从长远来看,它将允许序列化正在运行的任务并将它们传递给Erlang样式.
因此问题 - 是否可能?
我不是在寻找(可能很明显)"不"的答案,因为它可能在某种程度上需要工作(在最坏的情况下,可能会试图破解编译器).我很感兴趣会有多难......
在新标准形成期间的某个地方,有一个更容易type_info使用的承诺,其中包括导致实施hash_code.在C++ 11中实现反射系统然而我又遇到了一个带有唯一类型识别的问题.
我需要:
请注意,我不需要程序执行之间的持久性.看起来像:
.name() 完全没用,因为标准没有任何保证..hash_code() 也没用,因为它不能保证是独一无二的type_info对象的指针在任何地方都不起作用(例如,跨越DLL).before()似乎是有用的-如果它不会从同一个问题,因为#3受苦虽然我不知道即使.before()是要使用,我们也可以使用map,而我更愿意使用unordered_map.
struct compare_type_info {
bool operator ()(const type_info* a, const type_info* b) const {
return a->before(*b);
}
};
std::map<const type_info*, X, compare_type_info> map;
m[&typeid(int)] = something;
Run Code Online (Sandbox Code Playgroud)
碰撞是否安全?订购操作员是否保证覆盖!<和!>值?
有没有办法在没有哈希冲突风险的情况下解决这个问题?
在卷起我自己的类型系统方面,我已经这样做了,但typeid解决了从基类型(继承)给出正确的最终类型的问题,我不想在我的类中添加任何字段(类型系统是"外部的" ").
即使在C++ 11中我们仍然搞砸了?:/
我有一个使用std::vector它的模板参数的模板类.参数可能不是默认的可构造的.我想减小矢量的大小(将其切割为给定的大小).明显
vec.resize( reduced_size );
Run Code Online (Sandbox Code Playgroud)
...不起作用,因为它需要默认的构造函数.
我当然可以:
在写这个问题时,我注意到我可以erase从向量到结尾的元素:
vec.erase ( vec.begin() + position, vec.end() );
Run Code Online (Sandbox Code Playgroud)
...但是,我不确定这是否会如此高效resize.
有没有一种有效的方法来减少矢量的大小而没有默认的构造函数?
C++ 11解决方案是可以接受的.
编辑:似乎MSVC和GCC都实现了缩小调整大小作为擦除调用,因此这回答了我的性能问题.
我知道几种方法来检测给定的类是否具有指定签名的函数.我想要的是在编译时推断出签名.考虑:
struct test_class
{
void test( int a );
void test( float b );
};
Run Code Online (Sandbox Code Playgroud)
我可以使用decltype和SFINAE来检测指定test()的存在,使用简单的语法has_test<test_class,int>();.然而,我想要的是类似的东西test_types<test_class>::types -> mpl::list< int, float >.任何人都有一个明智的想法如何做到这一点?要求是无法准备可检测类型的列表(因此它将检测任何类型test( T ),而不仅仅是我们"注册"的类型.
我正在libral(BSD,MIT,PD)许可证中搜索C++中的超轻gzip压缩/解压缩库(明确比zlib轻).谷歌搜索显示了许多库,但要么是膨胀(如Crypto ++中的GZ压缩),要么是限制性更强的许可.
我很难相信,没有轻量级的免费gz实现......
最好是C++(我需要以流的形式提供它),但C可以.
我很惊讶Google没有找到解决方案.我正在寻找一种允许SDL_RWops与std :: istream一起使用的解决方案.SDL_RWops是在SDL中读/写数据的替代机制.
是否有指向解决问题的网站的链接?
一个明显的解决方案是预先读取足够的数据到内存,然后使用SDL_RWFromMem.但是,这有一个缺点,我需要事先知道文件大小.
似乎可以通过"覆盖"SDL_RWops函数以某种方式解决问题......
想象一下,你站在地上仰望着天空中的立方体.当你倾斜头部时,立方体会移动.我试图在iPhone上使用OpenGL ES通过操纵相机的倾斜来复制它,同时查看围绕原点绘制的简单3D立方体.我正在使用gluLookAt()Cocos2d中的函数,它应该模拟OpenGL版本,似乎当我尝试修改任何值时,我的立方体消失了.
我的问题是:你能在gluLookAt()这里提供一个让我开始操作相机的用法,这样我就可以弄清楚它是如何工作的吗?我真的很有兴趣学习如何沿Y轴倾斜相机.
这是我目前的代码:
视口配置
glBindFramebufferOES(GL_FRAMEBUFFER_OES, _viewFramebuffer);
glViewport(0, 0, _backingWidth, _backingHeight);
Run Code Online (Sandbox Code Playgroud)
投影矩阵
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Maybe this should be a perspective projection?? If so,
// can you provide an example using gluPerspective()?
glOrthof(-_backingWidth, _backingWidth,-_backingHeight, _backingHeight, -1, 1);
Run Code Online (Sandbox Code Playgroud)
ModelView矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt() // What goes here?
Run Code Online (Sandbox Code Playgroud)
绘图代码
static const GLfloat cubeVertices[] = {
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
-1.0, 1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
-1.0, 1.0, -1.0,
1.0, 1.0, …Run Code Online (Sandbox Code Playgroud) 我想像应用程序一样开发谷歌桌面搜索,我想知道我应该使用哪种索引技术/算法,这样我就可以获得非常快速的数据回溯.
以下是差异的简单演示:
//if using <string> you can do cout << str
//if using <string.h> you must do cout << str.c_str() (else get runtime error)
#include <string>
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
char* pBuf;
string str = "Hello World";
//cout << str.c_str() << endl;
cout << str << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何强制运行时库始终允许cout << mystr(一致,无需添加mystring.c_str())????
我的应用程序是混合的(两个#include标头都存在)....运行时混淆了吗?