함수 포인터를 템플릿 함수 유형 매개 변수로 사용 하시겠습니까?

수지스
#include <iostream>
#include <unordered_map>
#include <utility>
#include <typeinfo>

using namespace std;
class Handle{
    public:
    int val;
    bool getAskPrice(int& tmp) const
    {
        tmp = val;
        return true;
    }
    
    bool setAskPrice(int& tmp)
    {
        val = tmp;
        return true;
    }
};

template<class RT, class ARG>
struct convertToAFL{
    static RT to_afl(ARG);
};

template<class RT, class ARG>
struct convertFromAFL{
    static RT from_afl(ARG);
};

template<>
struct convertToAFL<float, int>
{
    static float to_afl(int& value)
    {
        return static_cast<float>(value);
    }
};

template<>
struct convertFromAFL<int, float>
{
    static int from_afl(float& val)
    {
        return static_cast<int>(val);
    }
};

struct Getter{
    template<typename TICK_D, bool (Handle::*Getter)(TICK_D&) const, typename AFL_D>
    static AFL_D getter(const Handle& handle)
    {
        TICK_D temp;
        bool exists;
        exists = (handle.*Getter)(temp);
        AFL_D x = convertToAFL<AFL_D, TICK_D>::to_afl(temp);
        return exists ? x : -1;
    }
};

struct Setter{
    template<typename TICK_D, bool (Handle::*Setter)(TICK_D&), typename AFL_D>
    static void setter(Handle& handle, AFL_D& val)
    {   
        TICK_D x;
        x = convertFromAFL<TICK_D, AFL_D>::from_afl(val);
        (handle.*Setter)(x);
    }
};

int main()
{   
    Handle h;
    float val = 20.0;
    Setter::setter<int, &Handle::setAskPrice, float>(h, val);
    std::cout<<Getter::getter<int, &Handle::getAskPrice, float>(h);
    
    //std::pair<, &Setter::setter<int, &Handle::setAskPrice, float>> x;
    return 0;
}

위의 코드는, 그러나, 예상대로 작동 main()어떻게이 (가) 플릿에 포인터를 저장할 수 있습니다, 대신 함수를 호출 Setter:setter()하고를 Getter::getter()? 나는 뭔가를 시도하고있다

std::pair<&Setter::setter<int, &Handle::setAskPrice, float>, &Getter::getter<int, &Handle::getAskPrice, float>(h)> func_pair;

나중에 함수를 호출 할 수 있습니다.

하지만 오류가 발생합니다.

main.cpp: In function ‘int main()’:
main.cpp:85:118: error: type/value mismatch at argument 1 in template parameter list for ‘template struct std::pair’
     std::pair<&Setter::setter<int, &Handle::setAskPrice, float>, &Getter::getter<int, &Handle::getAskPrice, float>(h)> func_pair;
                                                                                                                      ^
main.cpp:85:118: note:   expected a type, got ‘& setter’
main.cpp:85:118: error: template argument 2 is invalid
안토니

정적 멤버 함수는 일반적인 함수입니다. 다음과 같이 이러한 포인터를 저장할 수 있습니다.

std::pair<void (*)(Handle& handle, float& val), float (*)(const Handle& handle)> 
    func_pair(&Setter::setter<int, &Handle::setAskPrice, float>, &Getter::getter<int, &Handle::getAskPrice, float>);

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

함수 포인터 유형의 템플릿 매개 변수가 모든 반환 유형의 함수를 허용하도록 허용

분류에서Dev

일반 함수 포인터를 템플릿 매개 변수로 사용하는 방법은 무엇입니까?

분류에서Dev

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

분류에서Dev

템플릿 유형을 함수 매개 변수로 사용하여 추상 템플릿 클래스를 파생하는 방법 (C ++ 11)

분류에서Dev

템플릿 유형의 매개 변수로 함수를받는 함수

분류에서Dev

템플릿 매개 변수를 함수 매개 변수로 사용

분류에서Dev

람다 함수는 해당 매개 변수를 템플릿 함수를 호출하는 템플릿 매개 변수로 사용합니다.

분류에서Dev

C ++ : 가변 템플릿 인수에서 유형 매개 변수를 사용하여 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

람다를 매개 변수로 사용하여 템플릿 함수를 사용할 수 없습니다.

분류에서Dev

매개 변수로 유형 또는 템플릿을 허용하는 템플릿

분류에서Dev

함수 포인터를 유형이 아닌 템플릿 매개 변수로 전달

분류에서Dev

템플릿 매개 변수의 유형을 확인하고 다른 템플릿을 사용합니다.

분류에서Dev

템플릿 매개 변수에서 함수 유형 반환 유형과 인수를 분리하는 방법

분류에서Dev

여러 유형의 함수에 대한 매개 변수로 함수 포인터를받는 함수에 대한 템플릿 함수 생성

분류에서Dev

boost :: optional 인수를 템플릿 함수의 매개 변수로 사용

분류에서Dev

템플릿 템플릿 매개 변수를 사용하여 std :: vector <MyType>을이 함수에 전달할 수없는 이유는 무엇입니까?

분류에서Dev

클래스 참조를 유형이 아닌 템플릿 매개 변수로 사용할 수 없습니다.

분류에서Dev

템플릿 매개 변수 유형의 변수를 어떻게 사용할 수 있습니까?

분류에서Dev

가변 클래스 템플릿을 함수 호출 매개 변수로 사용하여 함수 템플릿 인수 추론

분류에서Dev

템플릿 매개 변수를 사용한 함수 호출

분류에서Dev

자바 템플릿 템플릿 유형으로 함수 매개 변수 클래스 유형 인스턴스를 반환하는 방법

분류에서Dev

템플릿을 사용하여 C ++의 함수에 모든 유형 매개 변수 전달

분류에서Dev

템플릿 매개 변수로 사용할 멤버 함수 포인터를 저장 / 검색하는 방법은 무엇입니까?

분류에서Dev

클래스 속성을 사용하여 유형이 아닌 템플릿 매개 변수로 템플릿 함수 호출

분류에서Dev

C ++ : 매개 변수 팩을 사용하여 가변 유형 매개 변수로 템플릿 클래스 상속

분류에서Dev

clang-query : 함수 인수 유형의 템플릿 매개 변수 이름 검사

분류에서Dev

'클래스 템플릿을 사용하려면 템플릿 인수가 필요함'오류가 기본적으로 지정된 비 유형 템플릿 매개 변수 값

분류에서Dev

함수 포인터를 매개 변수로 사용하여 템플릿의 정적 멤버를 초기화하는 방법

분류에서Dev

템플릿을 템플릿 인수로 사용하는 함수

Related 관련 기사

  1. 1

    함수 포인터 유형의 템플릿 매개 변수가 모든 반환 유형의 함수를 허용하도록 허용

  2. 2

    일반 함수 포인터를 템플릿 매개 변수로 사용하는 방법은 무엇입니까?

  3. 3

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

  4. 4

    템플릿 유형을 함수 매개 변수로 사용하여 추상 템플릿 클래스를 파생하는 방법 (C ++ 11)

  5. 5

    템플릿 유형의 매개 변수로 함수를받는 함수

  6. 6

    템플릿 매개 변수를 함수 매개 변수로 사용

  7. 7

    람다 함수는 해당 매개 변수를 템플릿 함수를 호출하는 템플릿 매개 변수로 사용합니다.

  8. 8

    C ++ : 가변 템플릿 인수에서 유형 매개 변수를 사용하여 함수를 호출하는 방법은 무엇입니까?

  9. 9

    람다를 매개 변수로 사용하여 템플릿 함수를 사용할 수 없습니다.

  10. 10

    매개 변수로 유형 또는 템플릿을 허용하는 템플릿

  11. 11

    함수 포인터를 유형이 아닌 템플릿 매개 변수로 전달

  12. 12

    템플릿 매개 변수의 유형을 확인하고 다른 템플릿을 사용합니다.

  13. 13

    템플릿 매개 변수에서 함수 유형 반환 유형과 인수를 분리하는 방법

  14. 14

    여러 유형의 함수에 대한 매개 변수로 함수 포인터를받는 함수에 대한 템플릿 함수 생성

  15. 15

    boost :: optional 인수를 템플릿 함수의 매개 변수로 사용

  16. 16

    템플릿 템플릿 매개 변수를 사용하여 std :: vector <MyType>을이 함수에 전달할 수없는 이유는 무엇입니까?

  17. 17

    클래스 참조를 유형이 아닌 템플릿 매개 변수로 사용할 수 없습니다.

  18. 18

    템플릿 매개 변수 유형의 변수를 어떻게 사용할 수 있습니까?

  19. 19

    가변 클래스 템플릿을 함수 호출 매개 변수로 사용하여 함수 템플릿 인수 추론

  20. 20

    템플릿 매개 변수를 사용한 함수 호출

  21. 21

    자바 템플릿 템플릿 유형으로 함수 매개 변수 클래스 유형 인스턴스를 반환하는 방법

  22. 22

    템플릿을 사용하여 C ++의 함수에 모든 유형 매개 변수 전달

  23. 23

    템플릿 매개 변수로 사용할 멤버 함수 포인터를 저장 / 검색하는 방법은 무엇입니까?

  24. 24

    클래스 속성을 사용하여 유형이 아닌 템플릿 매개 변수로 템플릿 함수 호출

  25. 25

    C ++ : 매개 변수 팩을 사용하여 가변 유형 매개 변수로 템플릿 클래스 상속

  26. 26

    clang-query : 함수 인수 유형의 템플릿 매개 변수 이름 검사

  27. 27

    '클래스 템플릿을 사용하려면 템플릿 인수가 필요함'오류가 기본적으로 지정된 비 유형 템플릿 매개 변수 값

  28. 28

    함수 포인터를 매개 변수로 사용하여 템플릿의 정적 멤버를 초기화하는 방법

  29. 29

    템플릿을 템플릿 인수로 사용하는 함수

뜨겁다태그

보관