나는 다른 사람들에게 동의합니다 – 그것은 이름 충돌, 모호성을 요구하고 있습니다. 그리고 사실은 덜 명확합니다. 의 사용을 볼 수는 있지만 using
개인적 선호는 제한하는 것입니다. 또한 다른 사람들이 지적한 것을 강력하게 고려할 것입니다.
상당히 일반적인 이름 일 수있는 함수 이름을 찾고 싶지만 std
네임 스페이스 에서만 (또는 그 반대 인 경우 – namespace , namespace , ...에 없는 모든 호출을 변경하려는 경우 ), 그럼 어떻게 할 건가요?std
X
당신은 그것을 할 수있는 프로그램을 작성할 수는 있지만, 프로젝트를 유지하기위한 프로그램을 작성하는 것보다는 프로젝트 자체에서 작업하는 데 더 나은 시간이 아닌가?
개인적으로 나는 실제로 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 인수 [변형 템플릿은 매우 유용합니다!). 내가 비록 그 것을 어렵게했다 동의 와 나는 여전히 그들과 함께 문제가 있습니다.