"Yardımcı fonksiyon" terimini açıklamayın. Bir tanım, sadece bir işin yapılması için her zaman kullandığınız bir kolaylık fonksiyonudur. Bunlar ana isim alanında yaşayabilir ve kendi başlıkları, vb. Olabilir. Diğer yardımcı fonksiyon tanımı, tek bir sınıf veya sınıf ailesi için bir yardımcı fonksiyondur.
// 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
Şimdi isPrinter
başlığı da dahil olmak üzere herhangi bir kod için kullanılabilir, ancak print_alignment_page
bir using namespace printer_utils::Xerox;
yönerge gerektirir
. Biri olarak da referans olabilir
Canon::print_alignment_page();
daha net olmak için.
C ++ STL, std::
sınıflarının ve işlevlerinin neredeyse tamamını kapsayan bir ad alanına sahiptir, ancak kodlayıcıya, sınıf adlarını, işlev adlarını vb. onların kendi.
Aslında, using namespace std;
bir başlık dosyasında ya da sıklıkla yapıldığı gibi içerideki ilk satır olarak kullanılması önerilmez main()
. std::
5 harftir ve genellikle kullanmak istediği işlevi (özellikle std::cout
ve std::endl
!) önyükleme görevi görür ancak bir amaca hizmet eder
Yeni C ++ 11, bunun gibi özel servisler için bazı alt ad alanlarına sahiptir.
std::placeholders,
std::string_literals,
std::chrono,
std::this_thread,
std::regex_constants
kullanım için getirilebilir.
Yararlı bir teknik, isim alanı kompozisyonudur . Biri, özel .cpp
dosyanız için gereken ad alanlarını tutmak için özel bir ad alanı tanımlar ve using
ihtiyaç duyabileceğiniz bir ad alanındaki her şey için bir sürü ifade yerine onu kullanır .
#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;
// ...
Bu teknik, bütüne maruz kalmayı sınırlandırır std:: namespace
( büyüktür ) ve kişinin en sık yazdığı en yaygın kod satırları için daha temiz kod yazmasına izin verir.
static
Anahtar kelimeyi öğrendiniz mi?