[英]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.