Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何预先计算,以C++;,模板类型,并在不同的模块中使用它_C++_Templates_G++ - Fatal编程技术网

C++ 如何预先计算,以C++;,模板类型,并在不同的模块中使用它

C++ 如何预先计算,以C++;,模板类型,并在不同的模块中使用它,c++,templates,g++,C++,Templates,G++,我有一个编译器优化问题 typedef typename static_update_manager<A>::type manager_t; static_update_manager_lst< boost::mpl::vector<A, B, C> > typedef typename static_update_manager_lst< boost::mpl::vector&

我有一个编译器优化问题

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
让A、B、C三个类和静态更新管理器另一个尚未实现的类

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
静态更新管理器必须按如下方式使用:

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
typedef typename static\u update\u manager::type manager\u t;
manager_t的定义放在名为manager.hpp的头文件中,并且 许多模块都使用该标头

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
在编译过程中,计算静态\u更新\u管理器::类型
取而代之的是

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
static\u update\u manager\u lst
计算管理器类型的时间非常长,占用大量内存。 问题是所有模块都在执行该演算。
但事实上,我们只需要做一次

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;

有C++机制吗?

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
一个想法是使用gcc将file manager.hpp转换为另一个文件
manager_.hpp看起来像:

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
typedef typename static\u update\u manager\u lstmanager\u t;
并在所有模块中使用manager_compiled.hpp而不是manager.hpp

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
但我不知道如何正确地做到这一点

typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;
我有一个可怕的解决办法:
这个想法是制作一个脚本,编译一个包含错误的源代码 管理器的类型\u t,然后在

要构造头管理器,可以尝试预编译头。

静态类型安全性很好,但有时代价太高。也许您可以将其中的一部分转移到运行时并降低复杂性。谢谢@NeilKirk,我已经尝试了您的想法。但是,不幸的是,预编译头
manager.hpp.gch
的大小为1.2go,并且我的模块的编译时间增加而不是减少。哇!!!!!!!!!那是一门非常复杂的课。创建预编译头需要更长的时间,但思想是后续编译会更快(只要头没有更改)
typedef typename static_update_manager<A>::type manager_t;                
static_update_manager_lst< boost::mpl::vector<A, B, C> >                    
typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;