deque에 swap가 있음에도 전역에서 또 swap을 정의해둔 이유가 뭔가요?

dltkddyd의 이미지

분명

void deque<T,Alloc>::swap (deque& x);

이런 식으로 데큐 클래스에 멤버함수로 데큐가 있습니다. 그럼에도 전역에서 swap를 다음과 같이 정의해놓고 있던데요.

template <class T, class Alloc>
void swap (deque<T,Alloc>& x, deque<T,Alloc>& y);

deque<char> dec1(5,'c');
deque<char> dec2(5,'e');
dec1.swap(dec2);

라고 하면 멤버함수가 호출될텐데, 굳이 전역에서 저 swap 함수를 정의해둔 의도를 모르겠습니다. 전역의 swap은 호출되어 사용되지 않잖아요.

저게 무슨 이름찾기 규칙(그걸 전문용어로 뭐라 하는데, 지금 기억이 나지 않습니다. 뭐라고 하죠?)과 관련이 있는 것인가요? 호출되는 순서와 관련해서 뭔가를 의도하지 않은 결과를 막기 위해 저렇게 하는 것 같은데요.

winner의 이미지

Interface 를 전역 swap 으로 통일하면 generic programming 하기 편해지는 등 장점이 많습니다.
만일 generic swap 하나만 정의해서 쓰면 deque 같이 동적할당되어 있는 자료의 내부 pointer swap 을 쓸 수 없으니 효율이 떨어지지요. 그래서 전역 swap 에 특화를 해둔 겁니다.
그리고 C++11 으로 오면서 interface 를 통일할려는 움직임이 강합니다. 예를 들면 begin 역시 container.begin() 을 쓰는게 아니라 begin(container) 를 쓰지요. 이렇게 하면 배열 등에도 쓸 수 있는 장점이 생깁니다. 다만 IDE 의 자동완성을 쓰기는 어려울 수 있겠죠.

익명 사용자의 이미지

멀티 패러다임 언어라 그렇습니다.

dltkddyd의 이미지

포인터 자체가 교환되는 방식의 일반적인 작동방식을 막기 위함이군요. 멀티 패러다임이라는 것은 C++이 객체지향 프로그램, 절차지향 프로그램, 일반화 프로그램의 짬뽕이라는 말씀이시죠(농담이었습니다)? 좋은 말씀 감사합니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.