c++ - 全局函数还是私有成员函数?
大家讲道理
大家讲道理 2017-04-17 15:18:29
0
1
395

实现一个类的时候,有个时候需要用到一些公共的函数,这些函数不依赖类的成员变量,这些函数应该放在同文件里面作为全局函数还是放到头文件中作为私有成员函数?
例如:
对于一个配置文件读取类,需要一个函数将读取的颜色字符串"#aabbcc"转换成结构体Color{ float r,g,b;};
私有成员版本:

// loader.h
class Loader{
public:
    void foo();
private:
    Color StringToColor(std::string s){...}    // private version
};
// loader.cpp
void Loader::foo()
{
    ...
    Color c = StringToColor(s);
}

同文件的全局函数版本:

// loader.cpp
Color StringToColor(std::string s){...}    // global version
void Loader::foo()
{
    ...
    Color c = StringToColor(s);
}

如果用私有成员版本,可能会导致头文件膨胀,特别是这些函数要用到某些库函数的时候,需要将库文件包含到头文件中。
如果用全局函数版本,好像不怎么OOP。一般来说,哪种实现更好呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(1)
洪涛

OOP のために OOP する必要はありません。会社に従わなければならない規制がない限り、C++ は単なる OOP パラダイムではありません

StringToColorLoader の単なる補助関数であり、クラスの内部変数に依存しないことが確実な場合は、それを匿名名前空間

で定義できます。 リーリー

このようにすると、StringToColorLoader.cpp 内でのみ表示され、全世界に公開されることはありません

名前空間に詳しくない場合は、Cstatic 概念を使用して StringToColor を静的として定義することもできますが、この記述方法は推奨されません:

リーリー

は、loader.cpp

内でのみ表示される役割を果たすこともできます
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート