首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅标头模板(外部模板)的显式实例化声明

仅标头模板(外部模板)的显式实例化声明
EN

Stack Overflow用户
提问于 2017-01-26 11:38:10
回答 1查看 529关注 0票数 11

我试图加快GLM(OpenGL数学)的编译时间。GLM大量使用C++模板。

到目前为止,这就是我所尝试的。

代码语言:javascript
复制
math.h
#pragma once

#include <glm\glm.hpp>
extern template struct glm::tvec3<float, glm::highp>;
代码语言:javascript
复制
math.cpp
#include "math.h"
template struct glm::tvec3<float, glm::highp>;

然后我有三个使用glm::vec3模板的文件,glm::vec3glm::tvec3<float, glm::highp>的类型。这三个文件a,b,c看起来几乎相同:

代码语言:javascript
复制
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;
}

我使用显式实例化定义和显式实例化声明。因此,文件a,b,c不应导致隐式实例化。但是编译的时间和我不做的一样。

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 04:01:27

您的math.h仍然会导致用户包括

这是你想要避免的事情,以加快速度。为了加快速度,创建您自己的类,它的实现(在math.cpp中)可以使用glm.hpp,但是该类的用户不需要自己包含glm.hpp。

这是留给学生的一个例子,但是您需要这样的东西:

math.h

结构vec3{ double x1,x2,x3};

vec3 +(ConstVector3& a,const 3& b);

然后,当a.cpp包含math.h时,它提供了所需的函数,但并不使所有编译单元都包含glm.hpp。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41872632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档