hid*_*yat 10 c++ templates extern c++11
我正在努力加快GLM(OpenGL数学)的编译时间.GLM大量使用C++模板.
这是我到目前为止所尝试的.
math.h
#pragma once
#include <glm\glm.hpp>
extern template struct glm::tvec3<float, glm::highp>;
Run Code Online (Sandbox Code Playgroud)
math.cpp
#include "math.h"
template struct glm::tvec3<float, glm::highp>;
Run Code Online (Sandbox Code Playgroud)
然后我有三个使用glm::vec3模板的文件,glm::vec3是一个typedef glm::tvec3<float, glm::highp>.这三个文件a,b,c看起来几乎相同:
a.cpp, b.cpp, c.cpp
#include "math.h"
glm::vec3 func() {
glm::vec3 a = glm::vec3{1,1,1};
glm::vec3 b = glm::vec3{1,1,1};
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用显式实例化定义和显式实例化声明.所以文件a,b,c不应该导致隐式实例化.但编译时间和我不这样做的时间相同.
CHK*_*ley -1
您的 math.h 仍然会导致用户包含 <glm\glm.hpp>
这就是您要避免加快速度的事情。为了加快速度,请创建您自己的类,其实现(在 math.cpp 内)可能使用 glm.hpp,但该类的用户不需要自己包含 glm.hpp。
这是留给学生的一个例子,但你想要类似的东西:
math.h
struct vec3{ 双 x1,x2,x3};
vec3 plus(const vec3& a, const vec3& b);
那么当a.cpp包含math.h时,它提供了你需要的函数,但并不会让你所有的编译单元都包含glm.hpp。
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |