将模板函数的范围限制为头文件

时间:2016-06-22 12:34:51

标签: c++ templates

我在头文件中实现了一些模板函数,我想将它们的范围限制在该头文件中,因为它们仅用作该文件中的辅助函数。未命名的命名空间不会起作用,因为当头文件包含在另一个文件中以使用主(非帮助)函数时,辅助函数会暴露出来。是否有限制其范围的解决方案?

5 个答案:

答案 0 :(得分:2)

在头文件中声明帮助函数。

在源文件中定义辅助函数和模板

是的,您可以将模板放入源文件中,只要它们不被任何其他翻译单元使用即可。 “模板总是需要在标题中”是一个需要被破坏的神话。请记住,编译器编译文件:预处理器生成源文件,通常来自header include。当然,这是不寻常的,因为模板通常是为了通用而编写的,并且将它们限制在单个翻译单元中会使它们有些窒息。

答案 1 :(得分:2)

您可以做的一件事是将帮助函数放入头文件中的detailinternal命名空间。 Typically这些命名空间中的任何内容都保留用于实现,不应使用/依赖,因为它们可以更改,恕不另行通知。这不是万无一失的,因为没有什么能阻止用户使用它们,但至少他们知道他们正在玩火。

答案 2 :(得分:1)

宣布一个班级。

将模板声明为类中的私有静态函数。

在头文件中使用类friend帮助函数。

答案 3 :(得分:1)

您可以将它放在类中,将其设置为私有,并将其他类作为好友类放在当前头文件中。类似的东西:

class Helper
{
    friend class SomeClass;
    friend class OtherClass;
    template<typename A>bool someFunc(A, int a);
    template<typename A>bool otherFunc(A);
}

答案 4 :(得分:1)

您可以将实现移动到cpp。 这将导致任何试图使用它们(除了你自己的项目)在链接时失败。

所以在标题中你有一个模板函数的前向声明:

template <typenamte T> void myFunc;

并在 .cpp 中获得了实施:

template <typenamte T> void myFunc
{

}