Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ - Fatal编程技术网

C++ 当函数需要成为成员函数时

C++ 当函数需要成为成员函数时,c++,C++,我试图弄清楚什么时候是使用成员函数(静态)的最佳时机,什么时候在.cpp文件中只添加一个helper方法 假设在MyClass类中,我想将TypeA转换为typeB。 这是一个漫长的过程,因此我将添加一个方法来处理转换 该方法是纯函数性的,与MyClass实例的状态无关。 它获取输入并生成输出,而不使用MyClass的任何成员(私有或公共) 只有MyClass将使用此方法 现在我不确定该方法需要如何定义: MyClass中的静态函数 使用此函数的专用类中的静态函数 帮助方法,该方法不是任何类的成

我试图弄清楚什么时候是使用成员函数(静态)的最佳时机,什么时候在.cpp文件中只添加一个helper方法

假设在MyClass类中,我想将TypeA转换为typeB。 这是一个漫长的过程,因此我将添加一个方法来处理转换

该方法是纯函数性的,与MyClass实例的状态无关。 它获取输入并生成输出,而不使用MyClass的任何成员(私有或公共)

只有MyClass将使用此方法

现在我不确定该方法需要如何定义:

  • MyClass中的静态函数
  • 使用此函数的专用类中的静态函数
  • 帮助方法,该方法不是任何类的成员,只是cpp文件中的定义
  • 如果,如您所说,“只有
    MyClass
    将使用此方法”,那么它在逻辑上属于
    MyClass
    静态成员函数

    3.帮助方法,它不是任何类的成员,只是cpp文件中的定义

    因此,如果需要,您可以更改helper方法的定义,而不必担心将
    MyClass
    的客户端重新编译成静态成员函数

    编辑:
    As@πάνταῥεῖ 也就是说,您可以将helper方法放在一个未命名的命名空间中,以限制它在
    MyClass
    cpp文件(以及包括它在内的翻译单元)中的使用。

    如果它仅在概念上与
    MyClass
    耦合,然后,它应该成为一个私有静态,并引入
    MyClass
    名称空间。只要有可能,并且此函数的使用仅限于
    MyClass
    ,我会选择3。(在一个未命名的名称空间中)。像这样的一个小“实用程序”函数,我做了#3(在未命名的名称空间中也是如此),可能是为了避免在头文件中用作静态函数时重新编译。但是在1和3之间没有多大关系。未命名的名称空间是为了避免文件之间的名称冲突。它不限制只使用一个类。@NeilKirk是的,如果包含cpp文件。这个技巧在一定程度上依赖于编程约定。我不明白。@Songyuanyo它仅限于在TU中使用。单个TU不限于仅包含一个类的定义。或者作为唯一使用的源文件中的本地函数。