繁体   English   中英

创建模板库文件

[英]Create Template Library File

我已经基于模板创建了一个库。 我想提供一个我的图书馆用户可以包含的文件。 因为它是模板库,所以我认为该库文件必须是.h文件。 因此,为了进行创建,我包括了所有其他模板头文件(带有声明和定义),然后使用g ++ -E进行了编译(只是预处理)。 直到使用库的人使用了我在库中使用的标准标头(如字符串)或库(如boost)之前,这个想法一直有效。 由于进行了预处理,因此将String中的所有定义复制到了库文件中。 如果用户也使用ie String,则编译器将引发双重定义错误,因为它在我的库和标头中定义。

那我该如何解决我的问题呢? 还有另一种生成我的库文件的方法吗? 还是我可以阻止头文件的包含,而只为我自己文件以外的所有内容插入一个include语句,这些文件将在用户编译时进行处理?

谢谢DevWurm

您不应该进行预处理; 您应该在最终用户使用标头进行编译时将其留给最终用户使用。 如果您这样做,所有预处理器的工作都会与您的系统匹配,这会中断您的系统,例如系统特定的预处理( #if defined (__APPLE__) )或限制(32 bit int )。 拥有标准库的副本也应该由他们来决定,他们可能想要与您不同的实现。 它还减少了代码膨胀。 例如,看一下Boost CRC标头的以下代码片段,它提供了模板化的CRC功能:

#ifndef BOOST_CRC_HPP
#define BOOST_CRC_HPP

#include <boost/config.hpp>   // for BOOST_STATIC_CONSTANT, etc.
#include <boost/integer.hpp>  // for boost::uint_t

#include <climits>  // for CHAR_BIT, etc.
#include <cstddef>  // for std::size_t

#include <boost/limits.hpp>  // for std::numeric_limits

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM