Tidak jelas istilah "Fungsi pembantu". Satu definisi adalah fungsi kenyamanan yang Anda gunakan sepanjang waktu hanya untuk menyelesaikan pekerjaan. Mereka dapat hidup di namespace utama dan memiliki header sendiri, dll. Definisi fungsi helper lainnya adalah fungsi utilitas untuk satu kelas atau keluarga kelas.
// 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
Sekarang isPrinter
tersedia untuk semua kode termasuk tajuknya, tetapi print_alignment_page
memerlukan
using namespace printer_utils::Xerox;
arahan. Orang juga dapat merujuknya sebagai
Canon::print_alignment_page();
agar lebih jelas.
C ++ STL memiliki std::
namespace yang mencakup hampir semua kelas dan fungsinya, tetapi memecahnya secara kategorikal menjadi lebih dari 17 header yang berbeda untuk memungkinkan pembuat kode mendapatkan nama kelas, nama fungsi, dll. Jika mereka ingin menulis mereka sendiri.
Bahkan, TIDAK dianjurkan untuk menggunakan using namespace std;
file header atau, seperti yang sering dilakukan, sebagai baris pertama di dalam main()
. std::
adalah 5 huruf dan sering tampaknya menjadi tugas untuk mengawali fungsi yang ingin digunakan (terutama std::cout
dan std::endl
!) tetapi memang memiliki tujuan.
C ++ 11 baru memiliki beberapa sub-namespaces di dalamnya untuk layanan khusus seperti
std::placeholders,
std::string_literals,
std::chrono,
std::this_thread,
std::regex_constants
yang bisa dibawa untuk digunakan.
Teknik yang bermanfaat adalah komposisi namespace . Satu mendefinisikan ruang nama kustom untuk menahan ruang nama yang Anda butuhkan untuk .cpp
file khusus Anda dan menggunakannya sebagai ganti sekelompok using
pernyataan untuk setiap hal dalam ruang nama yang mungkin Anda butuhkan.
#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;
// ...
Teknik ini membatasi pemaparan pada keseluruhan std:: namespace
( ini besar! ) Dan memungkinkan seseorang untuk menulis kode pembersih untuk baris kode paling umum yang paling sering ditulis orang.
static
kata kunci?