나는 다른 사람들에게 동의합니다 – 그것은 이름 충돌, 모호성을 요구하고 있습니다. 그리고 사실은 덜 명확합니다. 의 사용을 볼 수는 있지만 using개인적 선호는 제한하는 것입니다. 또한 다른 사람들이 지적한 것을 강력하게 고려할 것입니다.
상당히 일반적인 이름 일 수있는 함수 이름을 찾고 싶지만 std네임 스페이스 에서만 (또는 그 반대 인 경우 – namespace , namespace , ...에 없는 모든 호출을 변경하려는 경우 ), 그럼 어떻게 할 건가요?stdX
당신은 그것을 할 수있는 프로그램을 작성할 수는 있지만, 프로젝트를 유지하기위한 프로그램을 작성하는 것보다는 프로젝트 자체에서 작업하는 데 더 나은 시간이 아닌가?
개인적으로 나는 실제로 std::접두사를 신경 쓰지 않습니다 . 나는 그것을하지 않는 것보다 더 좋아 보인다. 그것이 명시적이고 나에게 "이것은 내 코드가 아닙니다 ... 표준 라이브러리를 사용하고 있습니다"라고 말했는지 또는 다른 것이 있는지는 모르겠지만 더 멋지다고 생각합니다. 최근에 C ++ 만 사용하고 (C와 다른 언어를 훨씬 더 오랫동안 사용하고 C는 어셈블리 바로 위에있는 가장 좋아하는 언어입니다) 이상한 점이 있습니다.
위와 다소 관련이 있지만 다른 사람들이 지적하는 내용이 있지만 다른 것이 있습니다. 이것이 나쁜 연습 일 수도 있지만 때로는 std::name프로그램 별 구현을 위해 표준 라이브러리 버전과 이름을 예약 합니다. 그렇습니다. 실제로 이것은 당신을 물고 열심히 물릴 수는 있지만,이 프로젝트를 처음부터 시작한 것이 전부입니다. 그리고 나는 그것을위한 유일한 프로그래머입니다. 예 : 과부하 std::string하고 호출합니다 string. 도움이되는 추가 사항이 있습니다. 나는 C와 Unix (+ Linux)가 소문자로 경향이 있기 때문에 부분적으로 수행했습니다.
그 외에도 네임 스페이스 별칭이있을 수 있습니다. 다음은 참조되지 않은 유용한 위치의 예입니다. 나는 C ++ 11 표준을 사용하며 특히 libstdc ++와 함께 사용합니다. 완벽하게 std::regex지원 하지는 않습니다 . 물론 컴파일되지만 프로그래머의 말에 오류가있는 줄을 따라 예외가 발생합니다. 그러나 구현이 부족합니다.
여기에 내가 해결 한 방법이 있습니다. Boost의 정규 표현식을 설치하고 링크하십시오. 그런 다음 libstdc ++가 완전히 구현되었을 때이 블록 만 제거하면되고 코드는 동일하게 유지되도록 다음을 수행합니다.
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
나는 그것이 나쁜 생각인지 아닌지에 대해서는 논쟁하지 않을 것이다. 그러나 나는 그것이 내 프로젝트를 깨끗하게 유지 하고 동시에 그것을 특정하게 만든다고 주장 할 것입니다 : 사실, Boost를 사용해야 하지만 libstdc ++가 결국 그것을 가지고있는 것처럼 사용하고 있습니다. 예, 자신의 프로젝트를 시작하고 처음에 표준 (...)으로 시작하면 유지 관리, 개발 및 프로젝트와 관련된 모든 것을 돕는 데 크게 도움이됩니다!
무언가를 명확히하기 위해 : 실제로 STL 의 클래스 / 이름을 의도적이고 구체적으로 대신 사용하는 것이 좋은 생각은 아닙니다 . 'String'이라는 아이디어가 마음에 들지 않았으므로 문자열은 예외입니다 (필요한 경우 말장난, 첫 번째, 위 또는 두 번째 무시).
그대로, 나는 여전히 C에 대해 매우 편견이 있으며 C ++에 대해 편견이 있습니다. 세부 사항을 절약하고, 내가 작업하는 많은 부분이 C에 더 적합합니다 (그러나 그것은 좋은 운동이었고 나 자신을 만드는 좋은 방법이었습니다. 덜 닫힌 마음, 덜 거만하고 더 수용 적.). 하지만 입니다 내가 수행하는 경우 이름 충돌을 야기 두 가지 이름을 (같은 것) 종류 I 실제로 목록을 사용 않으며, (그것은 매우 일반적인하지가 있습니까?) : 유용한 것은 일부는 이미 제안 것입니다 using namespace std;, 그래서를 그 목적을 위해 나는 구체적이고 통제력이 있고 표준 사용을 원한다면 그것을 명시해야한다는 것을 알고 있습니다. 간단히 말해서 허용되는 가정은 없습니다.
그리고 Boost의 정규 표현식을의 일부로 만드는 것과 관련하여 std. 향후 통합을 위해이 작업을 수행하고 다시 한 번 이것은 이것이 편견임을 인정 boost::regex:: ...합니다. 그러나 그것이 그렇게 추악하다고 생각하지 않습니다 . 사실, 그것은 저에게 또 다른 것입니다. C ++에는 아직 외모와 메소드에서 아직 완전히 받아들이지 않은 것들이 많이 있습니다 (또 다른 예 : 가변 템플릿과 var 인수 [변형 템플릿은 매우 유용합니다!). 내가 비록 그 것을 어렵게했다 동의 와 나는 여전히 그들과 함께 문제가 있습니다.