<질문>
나는 이것을 쓰고 싶다
typedef void (*FunctionPtr)();
사용using
. 어떻게 해야 할까요?
<답변1>
포인터에서 식별자를 제거하는 것을 제외하고는 유사한 구문을 가지고 있습니다.
using FunctionPtr = void (*)();
여기Example
"추함을 제거"하려면 Xeo가 제안한 것을 시도하십시오.
#include
using FunctionPtr = std::add_pointer::type;
그리고 여기 또 다른demo.
<답변2>
포인터 형식 정의를 피하면 "추함"도 제거할 수 있습니다.
void f() {}
using Function_t = void();
Function_t* ptr = f;
ptr();
<답변3>
당신은 원하는type-id
, 삭제하는 것을 제외하고는 선언과 본질적으로 정확히 동일합니다.declarator-id
. 그만큼declarator-id
일반적으로 식별자이며 등가 선언에서 선언하는 이름입니다.
예를 들어:
int x
그만큼declarator-id
~이다x
그래서 그냥 제거:
int
비슷하게:
int x[10]
제거x
:
int[10]
귀하의 예:
void (*FunctionPtr)()
여기declarator-id
~이다FunctionPtr
. 그래서 그것을 얻기 위해 그것을 제거하십시오type-id
:
void (*)()
이것은 주어진 때문에 작동합니다type-id
선언을 생성하기 위해 식별자가 어디로 갈 것인지 항상 고유하게 결정할 수 있습니다. 표준의 8.1.1부터:
식별자가 나타날 [type-id]의 위치를 고유하게 식별하는 것이 가능합니다. 건설이 [선언]이라면. 명명 된 유형은 다음 유형과 동일합니다. 가상 식별자.
<답변4>
명확성을 위해 이 구문은 어떻습니까? (중괄호 참고)
void func();
using FunctionPtr = decltype((func));
<답변5>
다른 접근 방식은 후행 반환 유형과 함께 자동 반환 유형을 사용할 수 있습니다.
using FunctionPtr = auto (*)(int*) -> void;
이것은 별칭이 "auto(*)"로 시작하고 식별자 이름으로 난독화되지 않을 때 무언가가 함수 ptr이라고 말할 수 있다는 논쟁의 여지가 있는 이점이 있습니다.
비교하다
typedef someStructureWithAWeirdName& (FunctionPtr*)(type1*, type2**, type3);
~와 함께
using FunctionPtr = auto (*)(type1*, type2**, type3) -> someStructureWithAWeirdName&;
면책 조항: 나는 이것을 Bean Deane의 "Easing into Modern C++" 강연에서 가져왔습니다.
'개발 > C++' 카테고리의 다른 글
[C++] tan과 tan2의 차이점은 무엇입니까? (0) | 2022.10.14 |
---|---|
[C++] #ifdef에 'or' 조건을 추가하는 방법 (0) | 2022.10.14 |
C ++에서 int를 문자열로 변환하는 가장 쉬운 방법 (0) | 2020.09.30 |
STL 또는 Qt 컨테이너? (0) | 2020.09.30 |