代码之家  ›  专栏  ›  技术社区  ›  bjskishore123

如何在不同的类之间共享实用程序函数?

  •  0
  • bjskishore123  · 技术社区  · 15 年前

    我有一个带有两个实用函数getDate和getTime的类显示,如下所示。

    class Display
    {
    public:
      void getDate(char *pDate); //Utility functions for converting to custom format
      void getTime(char *pTime);
    };
    

    稍后,在另一个名为retriever的类中,我需要相同的实用程序函数getdate和gettime。我不想做 getDate getTime 函数全局(或类似于C的函数),以避免意外使用这些函数(这两个类是特定的)。即使将它们包装在命名空间中也不能防止意外使用。

    显示和检索器是不同的类。不能在它们之间使用继承。不能使用组合和聚合,因为这些类的对象的生存期将不同。它们不同时存在。

    是否有任何好的方法可以将实用程序函数移出显示并在类显示和检索器中使用它们? 把getdate和gettime放在称为utilities的单独类中,并在类的显示和检索器中使用它的对象,这样做好吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Kirill V. Lyadvinsky    15 年前

    我认为使用名称空间是最合适的。您可以为该命名空间选择名称,以便每个人都知道它的用途:

    namespace DisplayRetrieverImplementation {
      void getDate(char *pDate); //Utility functions for converting to custom format
      void getTime(char *pTime);
    }
    
        2
  •  2
  •   Cheers and hth. - Alf    15 年前

    根据您在评论/讨论中的附加信息,例如 getDate 不依赖实例数据, 取日期 getTime 不应是非静态成员函数。理想情况下,它们应该是独立的功能。可能在命名空间中。

    把它们和其他相关的东西放在自己的模块中。

    它可以是纯headerfile模块,也可以是由headerfile和实现文件组成的单独编译器模块。

    将函数放在命名空间中,例如 timeutil 或者图书馆的名字,随便什么。

    我建议把它们换回来 std::string 而不是使用原始指针参数,例如

    #include <string>
    
    namespace timeutil {
        std::string timeString();
        std::string dateString();
    }
    

    干杯!

        3
  •  0
  •   Benjamin Lindley    15 年前

    您可以使函数成为另一个类的私有静态成员。并成为那个班的展示和检索的朋友。