반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컴퓨터공학
- 인공지능
- 데이터구조
- 클라우드컴퓨팅
- 데이터베이스
- 소프트웨어공학
- 코딩
- 자료구조
- 버전관리
- 데이터분석
- 프로그래밍
- 2
- 딥러닝
- 알고리즘
- 보안
- 네트워크
- 빅데이터
- I'm Sorry
- 컴퓨터비전
- 파이썬
- 자바스크립트
- 프로그래밍언어
- 데이터과학
- 사이버보안
- 웹개발
- 컴퓨터과학
- 네트워크보안
- 머신러닝
- 소프트웨어
- Yes
Archives
- Today
- Total
스택큐힙리스트
템플릿 내에서 extern-"C"-함수에 대한 포인터 타입을 typedef 할 수 있는 방법이 있을까요? 본문
반응형
템플릿에 대한 포인터를 가리키는 단일 인수를 사용하는 C 언어 연결을 사용하는 공개 typedef
을 추가하려고합니다.
시도해 봤지만 성공하지 못했습니다:
extern C {
template <typename return_t_, typename arg1_t_>
struct test
{
typedef return_t_ (*C_fun1_t)(arg1_t_);
};
}
그리고:
template <typename return_t_, typename arg1_t_>
struct test
{
extern C {
typedef return_t_ (*C_fun1_t)(arg1_t_);
}
};
그리고:
template <typename return_t_, typename arg1_t_>
struct test
{
extern C typedef return_t_ (*C_fun1_t)(arg1_t_);
};
성공하지 못했습니다.
내가 달성하려고하는 것이 가능한 것인가요?
답변 1
C++03, §7.5p4:
링크지정은 네임스페이스 범위에서만 사용됩니다. ... C 언어 링크는 클래스 멤버의 이름과 클래스 멤버 함수의 멤버 함수 유형에는 무시됩니다.
불행히도, 현재의 C++에서는 이것을 할 수 없습니다. 최신 C++0x 초안에서도 이 텍스트는 변경되지 않았지만 템플릿 typedefs로 이를 수행할 수 있을 수도 있습니다.
답변 2
가능합니다. C 언어에서는 extern C 키워드를 사용하여 C 스타일의 함수 포인터를 선언할 수 있습니다. 템플릿 안에서도 이러한 함수 포인터를 typedef 할 수 있습니다. 이러한 기능은 C++ 언어에서도 사용 가능합니다.C++ 템플릿을 사용하여 포인터-extern C-함수 타입을 typedef 하는 방법은 두 가지가 있습니다. 첫 번째는 typedef를 사용하여 포인터-extern C-함수 타입을 템플릿 구조체나 클래스 내부에서 정의하는 것입니다. 예를 들어, 다음과 같은 코드로 typedef를 작성할 수 있습니다:
```cpp
template
struct FunctionPtr
{
typedef T (*FunctionType)();
};
// 사용 예시
FunctionPtr
```
두 번째 방법은 using 키워드를 사용하여 typedef를 할 수 있습니다. using 키워드는 C++11 이상에서 사용할 수 있습니다. 다음과 같은 코드로 using을 사용할 수 있습니다:
```cpp
template
using FunctionPtr = T (*)();
// 사용 예시
FunctionPtr
```
어떤 방법을 선택하든, 템플릿을 사용하여 포인터-extern C-함수 타입을 typedef 할 수 있습니다. 이를 활용하면 C++ 코드에서 C 스타일의 외부 함수 포인터를 정의하고 사용하는 작업을 편리하게 할 수 있습니다. 이러한 기능을 활용하여 C와 C++ 사이의 상호 운용성을 높일 수 있습니다.
반응형
Comments