템플릿 매개 변수로서의 서명으로 오버로드 된 함수를 어떻게 해결합니까?

잭 안식일

델리게이트 라이브러리를 작성 중이고이 문제에 대해 고민했습니다. 다음과 같이 foo라는 오버로드 된 함수가 있다고 가정 해 보겠습니다.

int foo(double d);
double foo(int d);

서명을 템플릿 매개 변수로 지정하여 어떤 함수가 의미하는지 확인하려면 템플릿 인수 목록을 어떻게 작성해야합니까? 기본적으로이 구문을 원합니다 (그러나 모든 서명과 함께 작동합니다).

Delegate d = make_delegate<&foo,int(double)>(); // "Delegate" is automatically deduced as Delegate<int(double)>

다음 도우미 템플릿을 사용하여 해결했지만 함수 서명의 매개 변수 유형을 수동으로 작성하는 경우에만 작동합니다. 가변 매개 변수 팩 Args...(Args_pack 특수화로 인코딩 됨)을 함수 서명 으로 전달하는 데 어려움을 겪고 있습니다.

template<typename... Args>
struct Args_pack {}

template<typename Signature>
struct Identify_signature_type;

template<typename Return, typename... Args>
struct Identify_signature_type<Return(Args...)> {

    using T_return = Return;
    using Args_pack = Args_pack<Args...>;
};

template<auto Signature> using Identify_signature = Identify_signature_type<decltype(Signature)>;


template<typename Signature, typename Identify_signature_type<Signature>::T_return Function(double /* important magic needed here */)>
auto make_delegate()
{...}

Delegate d = make_delegate<int(double), &foo>(); // Works. However, it would be nice if the template parameters could exchange places.
감독자

*서명에를 추가 하여 올바른 함수 포인터 유형을 얻을 수 있습니다 .

template<typename Signature, Signature* fptr>
auto make_delegate()
{...}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

바인딩 된 멤버 메서드를 typedef 한 다음 해당 형식을 템플릿 매개 변수로 사용하려면 어떻게해야합니까?

분류에서Dev

템플릿 화 된 클래스 인스턴스를 템플릿 매개 변수로 다른 템플릿에 어떻게 전달합니까?

분류에서Dev

Lua에서 내 함수에 매개 변수로 전달 된 함수에서 함수의 매개 변수를 얻으려면 어떻게해야합니까?

분류에서Dev

템플릿 매개 변수를 기반으로 함수를 "활성화"하려면 어떻게합니까?

분류에서Dev

가변 템플릿 함수를 어떻게 오버로드합니까?

분류에서Dev

함수 포인터를 클래스 템플릿 매개 변수로 어떻게 전달합니까?

분류에서Dev

조건 자 함수를 템플릿 매개 변수로 어떻게 전달합니까?

분류에서Dev

미디어 위키 템플릿에서 포함 된 템플릿으로 매개 변수 전달

분류에서Dev

템플릿 매개 변수로 고정 된 함수 매개 변수의 C ++ 수

분류에서Dev

Azure ARM 템플릿-연결된 템플릿의 출력 변수를 매개 변수로 다른 템플릿에 전달하는 방법은 무엇입니까?

분류에서Dev

가변 개수의 매개 변수로 람다 함수를 어떻게 오버로드 할 수 있습니까?

분류에서Dev

명시 적으로 지정된 템플릿 매개 변수 팩

분류에서Dev

함수는 C ++에서 값으로 전달 된 매개 변수를 어떻게 수정할 수 있습니까?

분류에서Dev

동일한 템플릿 함수의 로컬 정적 변수에 의해 매개 변수화 된 템플릿 유형이 동일하게 비교되어야합니까?

분류에서Dev

Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

분류에서Dev

Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

분류에서Dev

템플릿 매개 변수가 std :: vector 일 때 사용되는이 메서드의 템플릿 버전을 어떻게 만들 수 있습니까?

분류에서Dev

부동 소수점 숫자를 템플릿 매개 변수로 어떻게 전달할 수 있습니까?

분류에서Dev

템플릿 기본 매개 변수로 사용될 때 완전히 특수화 된 오버로드 된 메서드가 호출되지 않습니다.

분류에서Dev

다른 템플릿의 매개 변수로서의 템플릿 매개 변수

분류에서Dev

func로 전달 된 익명 메서드의 매개 변수 값을 얻으려면 어떻게해야합니까?

분류에서Dev

템플릿 함수를 다른 템플릿의 매개 변수로 사용할 수 있습니까?

분류에서Dev

템플릿 URL은 매개 변수를 잘못된 순서로 렌더링하고 NoReverseMatch 오류를 생성합니다. 왜 일어나고 있습니까?

분류에서Dev

나뭇 가지 템플릿 내에서 parameters.yml에 정의 된 매개 변수에 액세스하려면 어떻게해야합니까?

분류에서Dev

템플릿이 아닌 클래스에서 매개 변수가없는 템플릿 메서드를 어떻게 전문화합니까?

분류에서Dev

전문화 된 템플릿 클래스의 정의 외부에서 템플릿 멤버 함수를 어떻게 정의합니까?

분류에서Dev

매개 변수가 변경 될 때 매크로를 사용하여 Cloudformation이 템플릿을 재 처리하도록하려면 어떻게해야합니까?

분류에서Dev

Angular : templateUrl을 통해로드 된 템플릿에 ng-hide를 어떻게 동적으로 추가합니까?

분류에서Dev

N-1 매개 변수로 지정된 템플릿 매개 변수로 N 매개 변수가있는 템플릿을 전달합니다.

Related 관련 기사

  1. 1

    바인딩 된 멤버 메서드를 typedef 한 다음 해당 형식을 템플릿 매개 변수로 사용하려면 어떻게해야합니까?

  2. 2

    템플릿 화 된 클래스 인스턴스를 템플릿 매개 변수로 다른 템플릿에 어떻게 전달합니까?

  3. 3

    Lua에서 내 함수에 매개 변수로 전달 된 함수에서 함수의 매개 변수를 얻으려면 어떻게해야합니까?

  4. 4

    템플릿 매개 변수를 기반으로 함수를 "활성화"하려면 어떻게합니까?

  5. 5

    가변 템플릿 함수를 어떻게 오버로드합니까?

  6. 6

    함수 포인터를 클래스 템플릿 매개 변수로 어떻게 전달합니까?

  7. 7

    조건 자 함수를 템플릿 매개 변수로 어떻게 전달합니까?

  8. 8

    미디어 위키 템플릿에서 포함 된 템플릿으로 매개 변수 전달

  9. 9

    템플릿 매개 변수로 고정 된 함수 매개 변수의 C ++ 수

  10. 10

    Azure ARM 템플릿-연결된 템플릿의 출력 변수를 매개 변수로 다른 템플릿에 전달하는 방법은 무엇입니까?

  11. 11

    가변 개수의 매개 변수로 람다 함수를 어떻게 오버로드 할 수 있습니까?

  12. 12

    명시 적으로 지정된 템플릿 매개 변수 팩

  13. 13

    함수는 C ++에서 값으로 전달 된 매개 변수를 어떻게 수정할 수 있습니까?

  14. 14

    동일한 템플릿 함수의 로컬 정적 변수에 의해 매개 변수화 된 템플릿 유형이 동일하게 비교되어야합니까?

  15. 15

    Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

  16. 16

    Android에서 결합 된 URL을 매개 변수로 전달하려면 어떻게해야합니까?

  17. 17

    템플릿 매개 변수가 std :: vector 일 때 사용되는이 메서드의 템플릿 버전을 어떻게 만들 수 있습니까?

  18. 18

    부동 소수점 숫자를 템플릿 매개 변수로 어떻게 전달할 수 있습니까?

  19. 19

    템플릿 기본 매개 변수로 사용될 때 완전히 특수화 된 오버로드 된 메서드가 호출되지 않습니다.

  20. 20

    다른 템플릿의 매개 변수로서의 템플릿 매개 변수

  21. 21

    func로 전달 된 익명 메서드의 매개 변수 값을 얻으려면 어떻게해야합니까?

  22. 22

    템플릿 함수를 다른 템플릿의 매개 변수로 사용할 수 있습니까?

  23. 23

    템플릿 URL은 매개 변수를 잘못된 순서로 렌더링하고 NoReverseMatch 오류를 생성합니다. 왜 일어나고 있습니까?

  24. 24

    나뭇 가지 템플릿 내에서 parameters.yml에 정의 된 매개 변수에 액세스하려면 어떻게해야합니까?

  25. 25

    템플릿이 아닌 클래스에서 매개 변수가없는 템플릿 메서드를 어떻게 전문화합니까?

  26. 26

    전문화 된 템플릿 클래스의 정의 외부에서 템플릿 멤버 함수를 어떻게 정의합니까?

  27. 27

    매개 변수가 변경 될 때 매크로를 사용하여 Cloudformation이 템플릿을 재 처리하도록하려면 어떻게해야합니까?

  28. 28

    Angular : templateUrl을 통해로드 된 템플릿에 ng-hide를 어떻게 동적으로 추가합니까?

  29. 29

    N-1 매개 변수로 지정된 템플릿 매개 변수로 N 매개 변수가있는 템플릿을 전달합니다.

뜨겁다태그

보관