내가 나에게 같은 것을 저장하는 배열을 사용하는 배열에 다른 인수를 가진 멤버 함수를 저장할 수 있습니까?
void a::f1()
void a::f2(int)
void a::f3(const std::string&)
이 가능 있다고 가정
ary1 = {&a::f1, bind(&a::f2, 2), bind(&a::f3, "abc"}
ary2 = {&a::f1, bind(&a::f3, "def")}
내가 나에게 같은 것을 저장하는 배열을 사용하는 배열에 다른 인수를 가진 멤버 함수를 저장할 수 있습니까?
void a::f1()
void a::f2(int)
void a::f3(const std::string&)
이 가능 있다고 가정
ary1 = {&a::f1, bind(&a::f2, 2), bind(&a::f3, "abc"}
ary2 = {&a::f1, bind(&a::f3, "def")}
만큼 callables이 같은 가지고 std::function
에서 서로 다른 호출 객체를 저장할 수있다 서명, 예를 들면 : 여기 람다 표현식을 사용하는 대신 std::bind
lambd 때문에
struct A {
void f1();
void f2(int);
void f3(const std::string&);
};
int main() {
std::function<void(A&)> functions[] = {
&A::f1
, [](A& a) { a.f2(2); }
, [](A& a) { a.f3("abc"); }
, std::bind(&A::f3, std::placeholders::_1, "abc")
};
A a;
for(auto& f : functions)
f(a);
}
주 가장 쉬운 방법은 쓰기 쉽고 읽기 쉽고 효율적입니다.
OP의 문제는 * member * 함수와 관련이있는 것 같습니다 –
@Gruffalo이 솔루션은 멤버 함수에 대한 _is_입니다. –
@JosephThomson 지금은 :) –
배열에 저장하려는 항목에는 다른 인수가 없습니다. Btw, 가능합니다 – user463035818
물론 이죠,하지만이 포인터에 대한 자리 표시자가 없습니다. – MikeMB
'std :: function'이 마음에 들었습니다 ... – StoryTeller