首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在供其他程序使用的头文件中,我只能声明模板吗?

在供其他程序使用的头文件中,我只能声明模板吗?
EN

Stack Overflow用户
提问于 2009-10-07 21:58:01
回答 3查看 189关注 0票数 0

我想知道是否使用模板,在其他线程中,我发现由于某些原因,模板必须在头文件中实现。这是好的,我的问题是,如果其他程序使用它的源码是否需要?从另一个线程的回答逻辑来看,似乎即使是其他程序员也需要完整的实现,以便编译器可以判断一行是否可以使用模板化函数。

如果是这样的话,我想模板对于希望其他人使用他的库的开发人员来说不是一件好事?如果没有,那么我们是好的,模板将被使用。

或者,如果至少有任何方式可以节省我的努力,花费的时间,从别人的代码?

(我将使用stl向量等,但我要求提供我自己的代码...模板看起来不错,省去了很多硬编码行或宏的滥用,但如果其他人能读懂你的源代码,那么打开项目几乎没有任何意义( xD)

谢谢,乔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-07 22:05:10

如果您希望库的用户能够使用您的模板,则他们的源代码需要对这些用户可用。

但是,有时您可以设计模板类,使大多数逻辑发生在头文件中没有完整源代码的非模板类中。

票数 4
EN

Stack Overflow用户

发布于 2009-10-07 22:05:55

这取决于您的模板是库接口的一部分,还是仅仅是实现的一部分。

如果它们是接口的一部分(例如,可能入口点返回特定模板类型的对象),那么是的,您需要向外部世界公开您的模板定义。

但是,如果模板只是实现的一部分,那么一旦构建了库,就没有必要与库的使用者共享模板定义。

票数 2
EN

Stack Overflow用户

发布于 2009-10-08 00:25:42

您可以将模板编写为非模板(通常是非类型安全)代码的包装器。

优点是...

  1. 非模板实现代码的源代码不必是减少模板膨胀的好方法。

明显的缺点是你有一个额外的抽象层和开销,而且非类型安全的实现代码显然需要一些注意。我倾向于在非模板代码中定义一个抽象的“工具”类,专门用于模板包装。我称它为工具,因为方法主要不作用于工具状态,而是作用于作为void*参数传递的对象。tool类将大多数类型不安全问题封装在几个方法中。该模板还提供了用户实际使用的类型安全包装器,该包装器与不安全代码接口,提供工具实例和进行类型转换等。

例如,如果我正在实现一个树数据结构,大多数树算法将是类型不安全的,并且会将节点和数据项视为空*指针(或者可能是节点*和数据*指针,节点和数据被声明但未定义结构)。我将有一个抽象的树工具库,包含用于节点创建、处理和其他基本操作的纯方法,包装器模板将基本上专门化树工具,提供知道节点和数据项的精确类型的方法实现,并将该工具的一个实例作为类成员。对于用户来说,包装器只是一个类型安全容器,与其他容器一样。

顺便说一句--在实现模板包装器时,要注意dependent name问题。

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

https://stackoverflow.com/questions/1534473

复制
相关文章

相似问题

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