>source

struct TypeA {
    using data_t= int;
    enum { thread_create= pthread_create }; //???
};
struct TypeB {
    using data_t= double;
    enum { thread_create= another_kind_of_thread_create }; //???
};
template<typename T>class Test {
public:
    void func() {
        T::thread_create(); //???
    }
private:
    T::data_t a;
};
Test<TypeA> t1;
Test<TypeB> t2;

내가 하려는 것은 템플릿 클래스를 전문화하는 것입니다.테스트하나의 템플릿 매개변수로

보다시피,데이터_t문제는 없지만 함수를 전달하는 것이 쉽지는 않을 것 같습니다. 이 code 조각은 오류를 생성합니다.오류: 'thread_create'의 열거자 값에는 정수 또는 범위가 지정되지 않은 열거 유형이 있어야 합니다..

이 같은 함수를 전달할 수 있습니까?

pthread_create는 함수이므로 열거형으로 채우는 것은 거의 의미가 없습니다. 함수 포인터에 할당할 수 있습니다. 또는 회전하고 pthread_create를 호출하는 정적 메서드를 가질 수 있습니다.

Igor Tandetnik2022-01-13 05:33:54
  • 답변 # 1

    당신이 올바르게 이해했다면 전문화에 따라 스레드 생성 기능과 데이터 유형을 전환하고 싶습니다. 그렇다면 왜 이런 식으로 sth하지 않습니까?

    #include <type_traits>void pthread_create(void*, void*);
    void another_kind_of_thread_create(void*, void*);
    //my fakes. use your includes here
    struct TypeA {
        using data_t= int;
        using thread_create_t= void (*)(void*, void*);
        static constexpr thread_create_t  thread_create{pthread_create};
    };
    struct TypeB {
        using data_t= double;
        using thread_create_t= void (*)(void*, void*);
        static constexpr thread_create_t thread_create{another_kind_of_thread_create};
    };
    template<typename T>class Test : public T {
    public:
        void func() {
            T::thread_create(this, &amp;
    a); //whatever, put here just to match the prototype...
        }
    private:
        typename T::data_t a;
    };
    Test<TypeA> t1;
    Test<TypeB> t2;
    static_assert(std::is_same<decltype(t1)::data_t, int>::value, "t1 should be int");
    static_assert(std::is_same<decltype(t2)::data_t, double>::value, "t2 should be double");
    

    데모

  • 답변 # 2

    당신은 예쁜 바닐라 특성 클래스를 설명하고 있습니다. 당신은 아마도 다음과 같은 것을 찾고 있을 것입니다:

    struct TypeA {
        using data_t= int;
        static void thread_create() { pthread_create() };
    };
    

    이렇게 하면T::thread_create();통사론.

  • 이전 javascript : 문자열로 묶인 앵커 태그에 onClick 함수를 추가하는 방법은 무엇입니까?
  • 다음 c++ : 재귀 포인터가 예상대로 작동하지 않음