다음을 통해 공유


별칭

이전에 선언된 형식에 대한 동의어로 사용하여 이름을 선언하는 별칭 선언 을 사용할 수 있습니다. (이 메커니즘은 비공식적으로 형식의 별칭으로 언급됩니다.). 사용자 지정 할당자 유용 될 수 있는, 생성하기 위한 별칭 템플릿 인 매커니즘을 사용할 수 있습니다.

using identifier = type;

설명

  • identifier
    별칭 이름입니다.

  • type
    별칭을 만들면 형식 식별자입니다.

별칭은 새 형식을 사용 하지 않고기존 형식 이름과 의미를 변경할 수 없습니다.

C++ 03으로 부터 typedef 메커니즘 별칭의 가장 간단한 형태 :

// C++11
using counter = long;

// C++03 equivalent:
// typedef long counter;

둘 다 "카운터" 형식의 변수를 만들 수 있도록 합니다. 조금 더 유용한 어떤 것은 std::ios_base::fmtflags와 같은 형식 별칭입니다 :

// C++11
using fmtfl = std::ios_base::fmtflags;
// C++03 equivalent:
// typedef std::ios_base::fmtflags fmtfl;

fmtfl fl_orig = std::cout.flags();
fmtfl fl_hex = (fl_orig & ~std::cout.basefield) | std::cout.showbase | std::cout.hex;
// ...
std::cout.flags(fl_hex);

또한 별칭 형식 정의 해당보다 훨씬 더 읽을 수 있지만 함수 포인터를 사용:

// C++11
using func = void(*)(int);

// C++03 equivalent:
// typedef void (*func)(int);

// func can be assigned to a function pointer value
void actual_function(int arg) { /* some code */ }
func fptr = &actual_function;

이 typedef 메커니즘의 제한은 템플릿을 사용하여 작동 하지 않습니다. 그러나 C++ 11에 별칭 구문 별칭 템플릿 만들 수 있습니다:

template<typename T> using ptr = T*; 

// the name 'ptr<T>' is now an alias for pointer to T
ptr<int> ptr_int;

예제

다음 예제에서는 사용자 지정 할당자를 사용하여 별칭 서식 파일을 사용 하는 방법 - 이 경우에 정수 벡터 형식입니다. 복잡한 매개 변수가 기본 기능 코드에 나열하는 것이 숨겨진 편리한 별칭이 만들어진 int 의 모든 형식을 대체할 수 있습니다. 코드 전체에 걸쳐 사용자 지정 할당자를 사용하여 가독성을 향상 시킬 수 있으며 버그로 인해 오타를 도입 함으로써 위험을 줄일 수 있습니다.

#include <stdlib.h>
#include <new>

template <typename T> struct MyAlloc {
    typedef T value_type;

    MyAlloc() { }
    template <typename U> MyAlloc(const MyAlloc<U>&) { }

    bool operator==(const MyAlloc&) const { return true; }
    bool operator!=(const MyAlloc&) const { return false; }

    T * allocate(const size_t n) const {
        if (n == 0) {
            return nullptr;
        }

        if (n > static_cast<size_t>(-1) / sizeof(T)) {
            throw std::bad_array_new_length();
        }

        void * const pv = malloc(n * sizeof(T));

        if (!pv) {
            throw std::bad_alloc();
        }

        return static_cast<T *>(pv);
    }

    void deallocate(T * const p, size_t) const {
        free(p);
    }
};

#include <vector>
using MyIntVector = std::vector<int, MyAlloc<int>>;

#include <iostream>

int main () 
{
    MyIntVector foov = { 1701, 1764, 1664 };

    for (auto a: foov) std::cout << a << " ";
    std::cout << "\n";

    return 0;
}

Output

  

참고 항목

참조

using 키워드