Salah satu keanehan sistem pengembangan saya (Codegear C ++ Builder) adalah bahwa beberapa tajuk yang dibuat secara otomatis bersikeras memiliki ...
using namespace xyzzy
... pernyataan di dalamnya, yang berdampak pada kode saya ketika saya tidak menginginkan atau mengharapkannya.
Adakah cara agar saya bisa membatalkan / menimpa pernyataan "menggunakan" sebelumnya untuk menghindari hal ini.
Mungkin...
unusing namespace xyzzy;
c++
namespaces
c++builder
Roddy
sumber
sumber
Jawaban:
Nggak. Tetapi ada solusi potensial: jika Anda menyertakan direktif include Anda di namespace-nya sendiri, seperti ini ...
namespace codegear { #include "codegear_header.h" } // namespace codegear
... maka efek dari setiap arahan penggunaan dalam tajuk itu dinetralkan.
Itu mungkin bermasalah dalam beberapa kasus. Itulah mengapa setiap style guide C ++ sangat menganjurkan untuk tidak meletakkan perintah "using namespace" di file header.
sumber
Tidak, Anda tidak dapat membatalkan penggunaan namespace. Satu-satunya hal yang dapat Anda lakukan adalah meletakkan
using namespace
-statement sebagai blok untuk membatasi cakupannya.Contoh:
{ using namespace xyzzy; } // stop using namespace xyzzy here
Mungkin Anda dapat mengubah template yang digunakan untuk header yang dibuat secara otomatis.
sumber
Anda mungkin terjebak menggunakan namespace eksplisit pada konflik:
string x; // Doesn't work due to conflicting declarations ::string y; // use the class from the global namespace std::string z; // use the string class from the std namespace
sumber
Untuk referensi di masa mendatang: karena versi XE ada nilai baru yang dapat Anda #
using namespace System;
tentukan untuk menghindari int yang ditakuti , termasuk: DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USEsumber
Bagaimana jika menggunakan sed, perl atau beberapa alat baris perintah lainnya sebagai bagian dari proses pembangunan Anda untuk memodifikasi header yang dihasilkan setelah dibuat tetapi sebelum digunakan?
sumber
Percobaan cepat dengan Visual Studio 2005 menunjukkan bahwa Anda dapat menyertakan header tersebut di namespace Anda sendiri dan kemudian
use
apa yang Anda butuhkan dari namespace ini (tapi janganuse
seluruh namespace, karena akan memperkenalkan namespace yang ingin Anda sembunyikan.sumber
#include<iostream> #include<stdio.h> namespace namespace1 { int t = 10; } namespace namespace2 { int t = 20; } int main() { using namespace namespace1; printf("%d" , t); printf("%d" , namespace2::t); }
sumber