c++ - 隐藏C++模板类成员函数的定义

标签 c++ templates

<分区>

C++ 编译器需要访问方法的实现才能实例化模板类。因此,我们需要在声明该模板的头文件中包含模板的定义,或者在头文件中定义它们。但由于多种原因,我想对我的用户隐藏函数的实现(定义),并希望确保他们只能访问函数声明。在 C++ 中使用模板时是否可以这样做?

最佳答案

这通常(例如)在 boost 中通过创建目录层次结构 impldetail 来完成。

impl 通常会包含公开的 API 成员函数的实现,而在 detail 中,正如您可能已经猜到的那样,包含您不想公开的细节. C++ 开发人员非常了解该系统。

举个例子:

my_service.hpp
impl/my_service.hpp
impl/my_service.ipp  ( OR )
detail/my_service.ipp

因此,我们的想法是拆分头文件并为用户提供仅包含您的顶级头文件,该文件将在内部包含其他文件。

但是没有人阻止用户直接包含 impl 头文件。如果你也想避免这种情况,那么你可以按照 Prevent header from being included in some files, in compilation time? 行做一些事情

关于c++ - 隐藏C++模板类成员函数的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436874/

相关文章:

c++ - 'parse': 不是 boost::spirit::x3::unused_type 的成员

c++ - HLSL mul() 变量说明

python - 如何使用 ctypes 将 numpy ndarrays 传递给 c++ 函数?

c++ - C-回调函数模板 : explicitly instantiate template

c++ - 为什么 std::string 不是模板常量参数的有效类型?

c++ - 如何在std::function上使用模板扩展

C++生成0到100,000之间的随机数

c++ - 我不断收到 'std::invalid_argument' what() : stoi exception thrown for seemingly no reason?

c++ - 如何将模板参数添加到全局函数?

c++ - std::thread 构造函数?特化?。 g++ 与 clang++