我应该如何使用doxygen记录函数对象(AKA仿函数)?将其记录为普通班级会让人觉得误导.我发现将函数对象视为具有闭包的函数比使用可调用类更好.
有没有办法记录符合我的偏好的函数对象?
class Adder
{
public:
Adder( size_t x ) :
m_x(x)
{ }
size_t operator () ( size_t y ) const
{
return m_x + y;
}
private:
const size_t m_x;
};
Run Code Online (Sandbox Code Playgroud) 我在某处读到(现在找不到)大型异常层次结构是浪费时间.这个陈述的理由似乎在当时是合理的,这个想法一直困扰着我.
在我自己的代码中,当我有一个可以有一系列错误条件的代码库时,我使用一个枚举成员的异常来区分它们.
如果出现我需要抓住其中一个错误的情况,我会抓住它,检查枚举并重新抛出是否不是我所期望的.理想情况下,这应该是罕见的.
我再次处理异常,我有一个反思的时刻,我质疑我的异常习惯.我很好奇其他人做了什么,为什么?
数据成员的层次结构或一个例外.
顺便说一句,我假设您同意异常与错误代码的想法.我不想打开那种虫子.
有人告诉我,分配malloc不再安全了,我不是C/C++大师,但我用malloc和C/C++做了一些东西.有谁知道我有什么风险?
引用他:
[..]但事实上,C/C++的弱点在于它的安全性,而阿喀琉斯的脚跟确实是malloc和滥用指针.C/C++它是一种众所周知的不安全语言.[..]我不建议继续用C++编程的应用程序很少."
好奇的是,我被告知使用dll文件,你可以修改dll而无需重新编译使用它的整个应用程序.另一方面,需要编译.lib文件,以便代码可以作为一个链接到应用程序.
所以我知道.lib文件被转换成机器代码.但是dll怎么样?它们在执行应用程序时会变成机器代码吗?
如果不正确使用,这可能会导致轻松入侵.
有没有办法计算应该达到多少更新以达到所需的帧速率,而不是系统特定的?我发现对于windows,但我想知道openGL本身是否存在这样的东西.它应该是某种计时器.
或者我怎样才能防止FPS急剧下降或上升?这次我正在测试它在线上绘制大量顶点,并且使用fraps我可以看到帧速率从400到200 fps,并且绘制它的速度明显减慢.
如果要从方法返回实例,是否要创建对象并向后发送指针或引用?什么是正确的方法和方法签名?
处理大型二进制文件有一些mercurial扩展.
我想使用最有可能是官方的(即与mercurial分发).
Kiln 2.0使用Bfiles的分支作为其二进制文件.这是否更有可能成为官方?
哪个是处理二进制文件的首选(半官方)扩展?
我可以在不使用模板参数作为函数参数的情况下使用可变参数模板吗?
当我使用它们时,它编译:
#include <iostream>
using namespace std;
template<class First>
void print(First first)
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print(First first, Rest ...rest)
{
cout << 1 << endl;
print<Rest...>(rest...);
}
int main()
{
print<int,int,int>(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我不使用它们时,它不会编译并抱怨模棱两可:
#include <iostream>
using namespace std;
template<class First>
void print()
{
cout << 1 << endl;
}
template<class First, class ... Rest>
void print()
{
cout << 1 << endl;
print<Rest...>();
}
int main()
{
print<int,int,int>();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我想作为模板参数提供的类是不可实例化的(它们具有在模板函数内部调用的静态函数).有没有办法做到这一点?
我想用一个正则表达式替换一个实例而不是所有实例.我怎么用Go的regexp库来做这件事?
输入:foobar1xfoobar2x
正则表达式:bar(.)x
替换:baz$1
ReplaceAllString输出:foobaz1foobaz2
ReplaceOneString输出:foobaz1foobar2x
我最近偶然发现了这个C++/Lua错误
int function_for_lua( lua_State* L )
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
Run Code Online (Sandbox Code Playgroud)
错误是luaL_error使用longjmp,因此堆栈永远不会解开并且s永远不会被破坏,泄漏内存.还有一些Lua API无法解开堆栈.
一个显而易见的解决方案是在C++模式下编译Lua,但有例外.然而,我不能像Luabind那样需要标准的C ABI.
我目前的想法是编写我自己的函数,模仿Lua API的麻烦部分:
// just a heads up this is valid c++. It's called a function try/catch.
int function_for_lua( lua_State* L )
try
{
/* code that may throw Lua_error */
}
catch( Lua_error& e )
{
luaL_error(L,e.what());
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:function_for_lua堆栈是否正确解开.可能会出错吗?