使用静态和好友方法C ++创建一个类

时间:2015-05-21 10:02:16

标签: c++ static-methods friend

为什么要创建一个只有静态和朋友方法的类?

例如:

namespace Image
{
    GLuint LoadImage(std::string name);
    GLuint LoadImage(std::string name, const int min, const int mag, const int wrapx, const int wrapy);
    GLuint LoadImage(std::string name, unsigned int& width, unsigned int& height);
    unsigned char* LoadImageData(std::string name, unsigned int& width, unsigned int& height);
    class ImagePrivate
    {
        static ILuint DevilLoadImage(std::string name);
        friend GLuint LoadImage(std::string name);
        friend GLuint LoadImage(std::string name, const int min, const int mag, const int wrapx, const int wrapy);
        friend GLuint LoadImage(std::string name, unsigned int& width, unsigned int& height);
        friend unsigned char*  LoadImageData(std::string name, unsigned int& width, unsigned int& height, unsigned int& bpp);
    };
}

友元方法使用ImagePrivate :: DevilLoadImage。

如果您已经有一个命名空间(Image),为什么要创建一个类?我认为一个类用于创建对象,但在这种情况下,不会创建任何对象。

非常感谢!

1 个答案:

答案 0 :(得分:0)

  

如果您已经有一个命名空间(Image),为什么要创建一个类?

看起来要使DevilLoadImage变为私有,所以只能通过命名空间中的“公共”函数来调用它。

这是否合情合理是品味问题。替代方法是将内部函数放在“详细信息”命名空间中,将它们隐藏在源文件中(可能不是模板的选项),或者将它们作为一般用途的文档。

  

我认为一个类用于创建对象

这当然是最常见的用法。但它也定义了一个范围(如命名空间),并允许您指定成员的可访问性(与命名空间不同),因此可以将其用于此目的。