【问题标题】:How to make a template function in test.h use a static method inside test.cpp如何使 test.h 中的模板函数在 test.cpp 中使用静态方法
【发布时间】:2013-06-21 18:39:00
【问题描述】:

目前模板函数在 .cpp 文件中,但是这些模板需要在头文件中定义。但是,当我将它们移到标题中时,模板无法访问 .cpp 文件中的静态方法。我需要进行哪些更改才能使其正常工作?

这只是一个实用程序头和cpp,与类无关。

【问题讨论】:

  • "...这些模板需要在标题中定义。"为什么?
  • “静态方法”是什么意思?
  • 它们需要在标题中定义,因为我们遵守 MISRA 规则。 static void method_name() { } 中的静态方法不在一个类中,只能由该文件使用

标签: c++ templates static


【解决方案1】:

我会继续将所有需要的函数的声明放在一个头文件中(并从它们的定义中删除static)。如果你把它们放在namespace FunctionName_impl_detail 或类似的地方,你就可以避免名字冲突。如果您将 cmets 放在不鼓励直接使用它们的声明附近,您可能不需要“隐藏”或“保护”它们。但是如果你想主要阻止其他代码使用它们,你可以让它们privatestatic 成为friends 模板函数的某个类的成员。

【讨论】:

    【解决方案2】:

    您应该在标题中定义静态方法。

    模板类必须完全在头文件中定义,因为编译器基本上会为每个模板实例化创建一个新类,因此它必须在编译时访问完整的方法实现。

    【讨论】:

    • 那么不是每个包含该头文件的文件也包含该静态方法的定义吗?
    • 仅当它被宣布为公开时。
    • 该方法仅供模板化函数使用。 header 和 cpp 与类无关。没有公共或私人...
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多