2015-01-11 2 views
-1

벡터와 같은 컨테이너에 함수 포인터를 저장하는 방법을 찾고 있습니다. 모든 함수가 동일한 매개 변수를 가질 수 있지만 함수에 개별적으로 고유 한 매개 변수가있는 경우 가능합니다. VS2013 그들을하지 않고 차라리 부스트 라이브러리를 사용하지 않는 게 좋을 때문에 나는 표준 : 기능 또는 표준 : : 바인딩을 사용할 수 없습니다다양한 void 함수 포인터의 벡터를 매개 변수와 함께 저장

#include <iostream> 
#include <vector> 

using namespace std; 

void sayHi() { 
    cout << "Hi" << endl; 
} 

void sayNum(int num) { 
    cout << num << endl; 
} 

int main() { 
    vector<void(*)()> funcs; // vector of 0 argument functions 
    funcs.push_back(sayHi); 
    funcs.push_back(sayNum); // can't store sayNum because it takes arguments 
} 

참고. 솔루션은 함수 포인터 벡터를 반복하고 유효한 인수를 사용하여 각 함수를 실행할 수 있어야합니다. P

+2

어떻게이 제품을 사용 하시겠습니까? – juanchopanza

+0

그럼 유효한 대답은 최소한의 '함수'구현일까요? – Columbo

+2

VS2013은'std :: function'과'std :: bind'를 모두 가지고 있습니다. –

답변

0

std::function, std::bind 및 람다 VS 2103 :

는 함수 포인터 작업, 나는 매우 하나 개의 문장에서 자바 스크립트에서 이런 종류의 일을하는 데있어 방법에 대한 내 잠재적 인 무지를 용서. 단순히 사용하십시오.

+0

완전히 나쁨, 나는 을 포함하고 있지 않았다. 그냥 신참 실수. – Jazcash

1

다른 사람의 코드 예제에서 언급 한 내용을 볼 수 없었던 실수를 저질렀지 만, 아마 C++에서 나쁘다.

내 대답을 수락하지 않겠지 만 유용하다고 생각하는 사람의 이익을 위해 제 코드를 게시 할 것이라고 생각했습니다.

#include <iostream> 
#include <vector> 
#include <functional> 

using namespace std; 

typedef std::vector<std::function<void(void)>> f_list; 
f_list f1; 

void _sayHi(); 
void _sayNum(int num); 

void sayHi() { 
    f1.push_back(
     std::bind(&_sayHi) 
    ); 
} 

void sayNum(int num) { 
    f1.push_back(
     std::bind(&_sayNum, num) 
    ); 
} 

void _sayHi() { 
    cout << "hi" << endl; 
} 
void _sayNum(int num) { 
    cout << num << endl; 
} 

int main() { 
    sayHi(); 
    sayNum(5); 

    for (int i = 0; i < f1.size(); i++) { 
     f1.at(i)(); // will execute desired functions 
    } 
} 
+0

왜'_sayHi'에'std :: bind'를 사용 했습니까? 이미 올바른 서명이 있습니다. 바로 벡터에 직접 추가 할 수 있습니다. –