「ヘルパー関数」という用語を明確にします。1つの定義は便利な機能であり、何らかの仕事をするためだけに常に使用します。これらはメイン名前空間に存在し、独自のヘッダーなどを持つことができます。他のヘルパー関数の定義は、単一のクラスまたはクラスファミリーのユーティリティ関数です。
// a general helper
template <class T>
bool isPrinter(T& p){
return (dynamic_cast<Printer>(p))? true: false;
}
// specific helper for printers
namespace printer_utils {
namespace HP {
print_alignment_page() { printAlignPage();}
}
namespace Xerox {
print_alignment_page() { Alignment_Page_Print();}
}
namespace Canon {
print_alignment_page() { AlignPage();}
}
namespace Kyocera {
print_alignment_page() { Align(137,4);}
}
namespace Panasonic {
print_alignment_page() { exec(0xFF03); }
}
} //namespace
今、isPrinter
そのヘッダを含む、任意のコードが利用可能ですが、print_alignment_page
必要と
using namespace printer_utils::Xerox;
ディレクティブを。次のように参照することもできます
Canon::print_alignment_page();
より明確にするために。
C ++ STLには、std::
そのクラスと関数のほぼすべてをカバーする名前空間がありますが、それらを17以上の異なるヘッダーに分類して、コーダーがクラス名、関数名などを書きたい場合に邪魔にならないようにします彼ら自身。
実際、using namespace std;
ヘッダーファイルで使用することはお勧めしません。また、よく行われるように、の最初の行として使用することもお勧めしませんmain()
。std::
5つの文字であり、多くの場合(特に使用に機能を一の欲求を前置きする雑用だstd::cout
とstd::endl
!)しかし、それは目的を果たす行います。
新しいC ++ 11には、次のような特別なサービス用のサブ名前空間がいくつかあります。
std::placeholders,
std::string_literals,
std::chrono,
std::this_thread,
std::regex_constants
使用のために持ち込むことができます。
便利なテクニックは名前空間の構成です。1つは、特定の.cpp
ファイルに必要なネームスペースを保持するカスタムネームスペースを定義し、using
必要なネームスペース内の各項目のステートメントの代わりにそれを使用します。
#include <iostream>
#include <string>
#include <vector>
namespace Needed {
using std::vector;
using std::string;
using std::cout;
using std::endl;
}
int main(int argc, char* argv[])
{
/* using namespace std; */
// would avoid all these individual using clauses,
// but this way only these are included in the global
// namespace.
using namespace Needed; // pulls in the composition
vector<string> str_vec;
string s("Now I have the namespace(s) I need,");
string t("But not the ones I don't.");
str_vec.push_back(s);
str_vec.push_back(t);
cout << s << "\n" << t << endl;
// ...
この手法は、全体への露出を制限しstd:: namespace
(大きい!)、人々が最も頻繁に記述する最も一般的なコード行に対して、よりクリーンなコードを記述することを可能にします。
static
キーワードについて学習しましたか?