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