小编Kor*_*icz的帖子

在普通键的情况下使用map over unordered_map有什么好处吗?

最近unordered_map在C++中的讨论使我意识到,我应该使用之前使用unordered_map过的大多数情况map,因为查找的效率(摊销的O(1)O(log n)).大多数时候我使用的地图我使用intstd::string作为键,因此我对哈希函数的定义没有任何问题.我越是想到它,我就越发现我发现std::map在一个简单类型的情况下我找不到任何理由std::unordered_map- 我看了一下界面,并没有发现任何显着的差异会影响我的代码.

因此,这个问题-有没有使用任何真正的原因std::mapstd::unordered map简单类型一样的情况下,intstd::string

我从一个严格的编程角度问我 - 我知道它没有被完全认为是标准的,并且它可能会带来移植问题.

另外我希望正确的答案之一可能是"它对于较小的数据集更有效",因为开销较小(是真的吗?) - 因此我想将问题限制在密钥数量的情况下是非平凡的(> 1 024).

编辑: 呃,我忘记了显而易见的(感谢GMan!) - 是的,地图是当然有序的 - 我知道,我正在寻找其他原因.

c++ performance dictionary unordered-map

346
推荐指数
12
解决办法
18万
查看次数

如何为GUI进行OpenGL实时文本渲染?

我正在实现一个基于OpenGL构建的GUI.我遇到了每个GUI都有的问题 - 文本渲染.我知道在OpenGL中渲染文本的几种方法,但是,我想知道哪种方法最适合GUI.

通常在GUI中我们有两种类型的文本 - 静态和实时.静态很容易 - 我们可以将TTF渲染到纹理并忘记它.这是"现场"文本,更让我烦恼 - 想象控制台,或多人游戏中的实时聊天.

我想到了几个选择:

  • 没有特殊情况 - 每次文本更改时渲染和加载纹理,请记住只在实际出现新文本时重新渲染它,并尝试将较大的文本拆分为小部分(如每个聊天行).然而,这仍然会让我们陷入像记分线一直在变化的情况,或者是一个呈现"每个角色"的介绍文本(在一些科幻游戏中看到的打字机风格)
  • quad-per字符 - 这似乎也是一种流行的解决方案,您可以使用ASCII表格准备纹理并渲染纹理四边形字符.但是,我对这种解决方案的效率存在严重怀疑.提示如何加快速度也很受欢迎.
  • 混合解决方案 - 但我不知道如何干净利落地实施

因此问题是 - 如何有效地在OpenGL中呈现文本?

如果这有帮助,我将使用STL/Boost-heavy C++进行编码,并针对GForce 6及更高版本的显卡.

opengl performance text-rendering

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

传递任何函数作为模板参数

我想将函数作为模板参数传递给函数.目前我设法做的最好的是:

template< typename F, F f >
void pass()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

...使用的:

pass< decltype(&func), &func >();
Run Code Online (Sandbox Code Playgroud)

我真正想要的是:

pass< &func >();
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有宏的情况下实现这个目标?基本上同时传递类型和值?编译器显然拥有所需的所有信息......

解决方案必须使用变量参数和返回类型.函数值在编译时使用,因此不能作为参数传递.

欢迎使用C++ 11解决方案.


编辑:用例 - 我在编译时生成绑定,我需要为每个传递的函数创建一个C++函数.这段代码的用例看起来(简化)或多或少像这样:

template < typename F, F f > 
int function_wrapper( lua_State* L ) 
{
    return dispatcher<typename return_type<F>::type>::call( L, 1, f );
}

void register_native_function( lua_Function f, const char* name )
{
    // binding call using pure C function f
}

template < typename F, F f >
void register_function( const …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers c++11

34
推荐指数
2
解决办法
4262
查看次数

你用Sinatra做什么用的?

我对Sinatra(红宝石框架)感到困惑.

它是一个轻量级的Rails替代品还是你可以让它们并排运行?

你可以做一个Web应用程序(如在Rails中)吗?比如一个twitter克隆?

ruby sinatra

27
推荐指数
3
解决办法
1万
查看次数

weak_ptr的性能损失是什么?

我正在为游戏设计一个对象结构,在我的案例中,最自然的组织变成了一棵树.作为智能指针的忠实粉丝我shared_ptr独家使用.但是,在这种情况下,树中的孩子将需要访问它的父母(例如 - 地图上的生物需要能够访问地图数据 - 他们的父母的数据.

拥有的方向当然是地图拥有它的存在,所以拥有它们的共享指针.要从存在中访问地图数据,我们需要一个指向父节点的指针 - 智能指针的方式是使用引用,ergo a weak_ptr.

然而,我曾经读到锁定a weak_ptr是一项昂贵的操作 - 可能这不再是真的 - 但考虑到weak_ptr它将经常被锁定,我担心这种设计注定会失败.

因此问题是:

锁定weak_ptr会有什么性能损失?它有多重要?

c++ performance boost weak-ptr

27
推荐指数
3
解决办法
8068
查看次数

Lua vs. XML用于数据存储

我们中的许多人都被灌输使用XML来存储数据.它的好处和缺点是众所周知的,我当然不想在这里讨论它们.但是在我用C++编写的项目中,我也使用了Lua.我很惊讶Lua可以用来存储和处理数据.然而,至少在游戏编程世界中,Lua的这一方面不太被认可.

我知道XML在诸如通过互联网发送数据的情况下以及在安全起作用的地方(例如使用从网络下载的数据,或加载用户可编辑的配置文件)以及最后的情况下具有优势.不同语言的程序正在读取相同的数据.

然而,一旦我学会了使用Lua处理数据是多么好和容易(特别是让luabind支持你!),我开始怀疑是否有任何理由使用XML来存储游戏数据,如果我们已经使用了Lua呢?

暴雪在使用Lua编写UI脚本时,仍然以XML格式存储布局.是什么原因只有UI相关?

使用Lua作为数据存储语言有什么缺点?

c++ xml lua

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

缓冲区 - 索引或直接,隔行扫描或分离

选择顶点缓冲区类型有哪些常用指南?我们什么时候应该使用隔行扫描缓冲区来处理顶点数据?什么时候我们应该使用索引数组和直接顶点数据?

我正在寻找一些常见的quidelines - 在某些情况下,其中一个或相反的更适合,但并非所有情况都很容易解决.在针对性能时,应该考虑选择顶点缓冲区格式?

还欢迎链接到该主题的Web资源.

opengl

14
推荐指数
2
解决办法
2420
查看次数

方法名称与C++中的模板方法名称相同

令我惊讶的是,这个程序在MSCV和GCC中编译:

class A
{
public:
  int add() { return 0; }
  template<typename T>
  T add() { return T(); }
};

int main() { 
  A a;
  a.add();
  a.add<int>();
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

显然,由于模板化方法的类型不能被推导出来并且需要明确说明,所以情况并非如此 - 似乎有点阴暗 - 如果它是一个非模板化方法,那将是显而易见的不正确.

我已经尝试使用谷歌搜索并查看标准的最后一个草案,但找不到答案 - 模板方法和普通方法的命名相同,只是在C++中返回类型合法,或者编译器只是宽容?

c++ templates

13
推荐指数
1
解决办法
1911
查看次数

将命令行参数传递给LaTeX文档

我有一个LaTeX文件,'myfile.tex'说,有时在代码中间,必须输入带有LaTeX宏的ASCII文件,'macrofile.tex,比方说,通过'\ _输入{macrofile}'命令.实际上,有多个'macrofiles',所以每次我必须编辑'myfile'并更改'macrofile'的名称.我可以通过使用\ typein命令来避免编辑部分,但是,我仍然需要从键盘输入名称.有没有办法从命令行执行此操作?总而言之,'myfile.tex'看起来像:

\documentclass{article}
........................
.......................
.......................
\begin{document}
.......................
......................
.......................
.......................
........................
.......................
\input{macrofile1} OR {macrofile2} OR {macrofile3} ETC...
.......................
......................
......................
....................
.....................
\end{document}
Run Code Online (Sandbox Code Playgroud)

我可以将'macrofile'的名称作为参数传递给'myfile.tex'吗?

谢谢

约翰

command-line latex arguments

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

推导函数指针返回类型

我认为代码会更好地说明我的需求:

template <typename F>
struct return_type
{
  typedef ??? type;
};
Run Code Online (Sandbox Code Playgroud)

以便:

return_type<int(*)()>::type -> int
return_type<void(*)(int,int)>::type -> void
Run Code Online (Sandbox Code Playgroud)

我知道的decltyperesult_of,但他们需要有传递的参数.我想从单个模板参数推断出函数指针的返回类型.我无法将返回类型添加为参数,因为这正是我想要隐藏的内容......

我知道有一个提升解决方案,但我不能使用它,并试图从提升中挖掘它导致了一个壮观的失败(通常如此).

欢迎使用C++ 11解决方案(只要VS2012支持).

c++ function-pointers c++11

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