가정하자 나는 임의의 컨테이너 유형 (C++ 11)에 무언가를하는 기능이 :이 같은 다른 함수에서이 함수를 호출 할 수 있습니다다른 함수에 함수 템플릿을 통과
template<class containerType>
void bar(containerType& vec) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
:
를void foo() {
std::vector<int> vec = { 1, 2, 3 };
bar(vec);
}
지금 난 그냥 바 같은 다른 기능을 가지고 가정, 나는 다음 foo는 이런 식으로 뭔가 보일 것 foo는 이러한 기능 중 하나를 전달하려는 :
template<class funcType>
void foo(funcType func) {
std::vector<int> vec = { 1, 2, 3 };
func(vec);
}
을
그러나,이 같은 전화 푸 (바 기능하지만 함수 템플릿이 아니므로, 꽤 지우기)
foo(bar);
이 작동하지 않습니다. 이것에 대한 좋은 해결책이 있습니까? 이 작업을 수행하기 위해 foo를 어떻게 정의해야합니까?
편집 : 코멘트에 요구 여기에 당신이 푸 INT의 벡터와 함께 작동 알고 있다면, 당신은 bar< std::vector<int> >
기능을 전달할 수
#include <iostream>
#include <vector>
#include <list>
template<class containerType>
void bar(containerType& vec) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
template<typename funcType>
void foo(funcType func) {
std::vector<int> vals = { 1, 2, 3 };
func(vals);
}
int main() {
// foo(bar); - does not work.
}
최소 컴파일 가능한 예가 누락되었습니다 –
왜 함수 포인터를 사용합니까? 나는 functor를 사용하는 것이 더 좋을 것이라고 믿는다. – AlexTheo
@AlexTheo 귀하의 의견을 보내 주셔서 감사합니다. 물론 펑터를 사용하는 것은 간단합니다! Bob은 대답과 비슷한 해결책을 게시했습니다. 나는 그걸로 갈거야! – fdlm