小编idu*_*ree的帖子

分析模板元程序编译时间

我正在开发一个具有大量编译时计算的C++项目.漫长的编译时间正在减慢我们的速度.我怎样才能找到模板元程序中最慢的部分,以便我可以优化它们?(当我们有慢运行时计算时,我有很多分析器可供选择,例如valgrind的callgrind工具.所以我尝试构建一个调试GCC并分析它编译我们的代码,但我没有从中学到太多东西.)

我使用GCC和Clang,但欢迎任何建议.

profile_templates在Boost的网站上找到了,但似乎记录很少,需要jam/bjam构建系统.如果您展示如何在非卡纸项目1上使用它,我会向您投票.https://svn.boost.org/svn/boost/sandbox/tools/profile_templates/似乎计算实例数,而计算所花费的时间将是理想的.

1 我们的项目使用CMake并且足够小,只需将模板分析用于模板分析就可以接受.

c++ profiling instantiation template-meta-programming

21
推荐指数
2
解决办法
2477
查看次数

std :: function的copy-constructor是否要求模板类型的参数类型为完整类型?

鉴于:

#include <functional>
class world_building_gun;
class tile_bounding_box;
typedef std::function<void (world_building_gun, tile_bounding_box)> worldgen_function_t;
void foo() {
    worldgen_function_t v;
    worldgen_function_t w(v);
}
Run Code Online (Sandbox Code Playgroud)

这会编译吗?我的编译器说:

是的:GCC/stdlibc ++(在GCC和Clang中也是boost :: function都是)

No:Clang/libc ++(http://libcxx.llvm.org/,Clang 3.0,libc ++ SVN截至今日)

(如果"no"是正确答案,我将修复我的真实代码,将完整类型放入更多标题或使用boost :: function.)

编辑:这是Clang错误消息:

In file included from foo.cpp:2:
In file included from /usr/include/c++/v1/functional:462:
/usr/include/c++/v1/type_traits:2766:19: error: invalid appli
    static_assert(sizeof(_Tp) > 0, "Type must be complete.");
                  ^~~~~~~~~~~
/usr/include/c++/v1/type_traits:2752:15: note: in instantiation of template class 'std::__1::__check_complete<world_buildin
    : private __check_complete<_Hp>,
              ^
/usr/include/c++/v1/type_traits:2753:15: note: in instantiation of template class 'std::__1::__check_complete<world_buildin
      private __check_complete<_T0, _Tp...> …
Run Code Online (Sandbox Code Playgroud)

c++ boost tr1 c++11

6
推荐指数
1
解决办法
1633
查看次数

是每个线程或每个进程的C99 fesetround()/ fegetround()状态?

我在网上找到的C和POSIX引用没有指定C99的fesetround()的线程安全性.甚至GNU文档也没有[1].状态是每线程还是每个进程?

[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding

c floating-point c99 thread-safety c11

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

rails mysql2:如何验证 mysql 服务器的 SSL 证书?

我正在尝试通过 SSL 远程连接到 mysql 数据库,并验证服务器的证书以匹配用于连接到服务器的 DNS 域。

使用命令行mysql工具,我可以使用mysql --ssl-ca=/path/to/cacert.pem --ssl-verify-server-cert.

使用 rails mysql2,我设置了sslca:¹,这会导致未完全验证的 SSL 连接像mysql --ssl-ca=这样。--ssl-verify-server-cert如果服务器证书的域错误,我该怎么做才能使连接失败?

我尝试添加这对这个问题没有影响如下:flags: SSL_VERIFY_SERVER_CERTflags: CLIENT_SSL_VERIFY_SERVER_CERTflags: 1073741824,和secure_auth: true

¹要么sslca: /path/to/cacert.pem在配置/ database.yml中,或?sslca=/path/to/cacert.pem在一个mysql2://URL

ssl ruby-on-rails ssl-certificate mysql2

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