Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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

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++ 在头文件中隐藏非成员函数_C++_Templates - Fatal编程技术网

C++ 在头文件中隐藏非成员函数

C++ 在头文件中隐藏非成员函数,c++,templates,C++,Templates,我想知道我是否可以在头文件中定义一些函数,然后在同一个头文件中使用它们,同时对其他任何东西隐藏它们 例如,我是否可以先定义一些通用帮助器函数(特定于数据结构),然后在使用这些函数的相同标头中定义一些数据结构 例如: 模板 无效掉期(T&a、T&b) { 温度T=a; a=b; b=温度; } 但是我不希望Swap()干扰具有相同名称的其他函数 我可以让它成为一个私有方法,但是我必须为使用它的每个类提供相同的实现,或者让它们成为朋友类…传统上,名称空间details用于必须放在头中的实现保留内容

我想知道我是否可以在头文件中定义一些函数,然后在同一个头文件中使用它们,同时对其他任何东西隐藏它们

例如,我是否可以先定义一些通用帮助器函数(特定于数据结构),然后在使用这些函数的相同标头中定义一些数据结构

例如:

模板
无效掉期(T&a、T&b)
{
温度T=a;
a=b;
b=温度;
}
但是我不希望
Swap()
干扰具有相同名称的其他函数


我可以让它成为一个私有方法,但是我必须为使用它的每个类提供相同的实现,或者让它们成为朋友类…

传统上,名称空间
details
用于必须放在头中的实现保留内容


此外,还有一个
std::swap
,因此不需要您自己的。

您通常不能对其他客户端完全隐藏函数,但可以将其放在自己的命名空间中,这样它就不会干扰客户端代码。通常的做法是将名称空间设置为主库名称空间的内部名称空间,并将其称为
details
或类似名称


当然,如果您需要函数通过ADL可用,那么它必须位于包含ADL应该匹配的类的名称空间中。这是无法避免的。

关于交换干扰其他交换功能,这就是名称空间被发明的原因,请使用它们!据我所知,只有将函数设置为类或结构内部的私有函数,才能在头文件中隐藏函数。您可以将此函数作为私有函数生成一个结构,并将正在生成的类指定为友元类。
template<class T>
void Swap(T &a, T &b)
{
  T temp = a;
  a = b;
  b = temp;
}