Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在test.h中创建模板函数在test.cpp中使用静态方法_C++_Templates_Static - Fatal编程技术网

C++ 如何在test.h中创建模板函数在test.cpp中使用静态方法

C++ 如何在test.h中创建模板函数在test.cpp中使用静态方法,c++,templates,static,C++,Templates,Static,目前模板函数位于.cpp文件中,但是这些模板需要在头文件中定义。但是,当我将它们移到标题中时,模板无法访问.cpp文件中的静态方法。我需要做哪些更改才能使其正常工作 这只是一个实用程序头和cpp,与类无关。您应该在头中定义静态方法 模板类必须完全在头文件中定义,因为编译器基本上为每个模板实例化创建一个新类,因此它必须在编译时访问完整的方法实现 我只需继续,将所有所需函数的声明放在头文件中(并从它们的定义中删除static)。如果将它们放在名称空间FunctionName\u impl\u det

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


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

您应该在头中定义静态方法


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

我只需继续,将所有所需函数的声明放在头文件中(并从它们的定义中删除
static
)。如果将它们放在
名称空间FunctionName\u impl\u detail
或类似的地方,就不会发生名称冲突。如果您将注释放在不鼓励直接使用它们的声明附近,您可能不需要“隐藏”或“保护”它们。但是如果你想阻止其他代码使用它们,你可以让它们成为
私有的
静态的
某个类的成员,这个类是
朋友的
模板函数。

“…这些模板需要在标题中定义。”为什么?你说的“静态方法”是什么意思?它们需要在标题中定义,因为我们遵守MISRA规则。静态方法,如静态void方法_name(){}中的静态方法,不在类内且仅由该文件使用。那么,包含该头的每个文件不都包含该静态方法的定义吗?仅当该静态方法声明为公共时。该方法仅由模板化函数使用。标题和cpp与类无关。没有公共或私人。。。