C++에서 다음과 같은 것이 가능한지 알고 싶습니다. 키가 std::string
이고 값이 함수 포인터 인 데이터 멤버 인 std::map
을 저장할 클래스를 생성해야합니다. 것은 내가이 함수 포인터들이 양식의 기능을 가리키는 즉 인수의 임의의 수를 받아들이는 기능을 가리켜 야한다는 의미에서 가변되고 싶어한다는 것입니다가변 포인터 함수를 멤버로 사용하여 클래스를 생성하는 방법은 무엇입니까?
template<class... Args> f(Args...);
중요한 비트입니다 I 내 클래스의 주어진 인스턴스의지도에서 다른 함수 포인터에 대해 다른 인수를 가질 수 있기를 원합니다. 예를 들어, 클래스의 객체를 만들고지도에 두 쌍을 포함시킬 수 있습니다. 하나는 (double, int)
을 인수로 갖는 함수에 해당하고 다른 하나는 (std::vector, int, int)
을 인수로 갖는 것입니다. 그리고 나는이 일반적인 것을 만들 수 있기를 원한다. 아마도지도에 새로운 요소를 추가 할 수 있기를 원한다. (비록 내가 컴파일 타임에만 이것을 할 것이지만, 여전히 코드를 작성할 필요가있다. 다른 파일/클라이언트에서 새 요소를 추가하려는 이후 유형에 대해 알지 못하는 클래스).
이것을 구현하는 가장 좋은 방법은 무엇입니까? 당신이, 당신이 실제로 할 수 캔트 말을 모든 사람들을 위해
어떻게 맵에서 함수를 호출하겠습니까? 대부분의 솔루션은 모든 종류의 컴파일 타임 유형 안전을 떨어 뜨립니다. 'std :: any'를 사용하여 함수 포인터를 저장할 수 있습니까? –
소리가 유형 삭제 작업과 같습니다. –
'f '를 함수 포인터로 변환하면 고정 된 수의 매개 변수와 유형을 가진 구체적인 함수입니다. 템플릿을 저장할 수 없습니다. – nwp