比較的どこからでも呼び出せるようにしておきたい関数は、どのように配置するのがよいのでしょうか。
自分は、以下に示す3つの方法をなんとなく使いわけています。
(1) 名前空間で囲う
namespace tool { void print_my_name(); }
(2) staticなメンバ変数にする
class Tool { static void print_my_name(); };
(3) グローバルなオブジェクトにする
Tool tool; class Tool { void print_my_name(); };
C++のライブラリ?は、(1)が多いのですかね・・・(std::coutなど?)
>どこからでも呼び出せるようにしておきたい関数・・・とは?
通常、ソースファイルは複数に分かれます。と、関数の実体は何処に?・・・と言うことですか?
(3)はシングルトンパターンと組み合わせないと他とは意味が変わってきそう。
>> cateyaさん
たとえば、クラスAの中にクラスBがあり、クラスBのなかにクラスCがあるとします。
もうひとつ、クラスXの中にクラスYがあり、クラスYのなかにクラスZがあるとします。
クラスCとクラスZから、「torimingo」という文字列の出力を行う関数print_my_name()を呼びたいとします。
print_my_name()をグローバル関数にすれば、クラスCとクラスZから簡単にアクセスできます。
この方法を採用する人もいると思われますが、しかし、名前空間で区切っておいたほうが、今後、関数名の衝突がおきる可能性が少なくなり、コード管理上良いと思われます。
そういう意味合いで、名前空間toolのなかに関数print_my_name()を入れたものが、(1)になります。print_my_name()の中身は省略しています。
(2)も(3)も、クラスCとクラスZから簡単に呼び出せます。
「どこからでも呼び出せるようにしておきたい関数」というのは、この例だと「クラスCとクラスZから簡単に呼び出せるようにしておきたい関数」という意味合いになります。
・・・こんな回答で大丈夫でしょうか・・・?
cateyeさんが意図している回答でなかったら、すいませんm(__)m
>> raccyさん
(3)にシングルトンパターンを組み合わせたものは、結構使われているのでしょうか。
(3)のままだと、グローバル変数ですし、あまりよくはないですよね・・・。
回答1件
あなたの回答
tips
プレビュー