스택큐힙리스트

템플릿 내에서 extern-"C"-함수에 대한 포인터 타입을 typedef 할 수 있는 방법이 있을까요? 본문

카테고리 없음

템플릿 내에서 extern-"C"-함수에 대한 포인터 타입을 typedef 할 수 있는 방법이 있을까요?

스택큐힙리스트 2023. 11. 17. 10:39
반응형

템플릿에 대한 포인터를 가리키는 단일 인수를 사용하는 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 ptr;
```
두 번째 방법은 using 키워드를 사용하여 typedef를 할 수 있습니다. using 키워드는 C++11 이상에서 사용할 수 있습니다. 다음과 같은 코드로 using을 사용할 수 있습니다:
```cpp
template
using FunctionPtr = T (*)();
// 사용 예시
FunctionPtr ptr;
```
어떤 방법을 선택하든, 템플릿을 사용하여 포인터-extern C-함수 타입을 typedef 할 수 있습니다. 이를 활용하면 C++ 코드에서 C 스타일의 외부 함수 포인터를 정의하고 사용하는 작업을 편리하게 할 수 있습니다. 이러한 기능을 활용하여 C와 C++ 사이의 상호 운용성을 높일 수 있습니다.

반응형
Comments