2017-10-27 19 views
-1

引数として受け取り、void *を別の関数に返す関数を渡したかったのです。 今私は次のコードを持っている:引数を渡してvoid *を返す関数を渡す

MyClass *MyClass::bind(std::function<void*(void *)> fun) { 
    this->value = fun(this->value); 
    return this; 
} 

valueMyClass内部void *変数であり、私は私の機能bindに関数を渡す方法を見つけ出すことはできません。
私はそれをこの

auto *class = new MyClass(); 
class->bind(fooFunction); 

のような関数の名前を渡ししようとすると、私はエラー

no viable conversion from '<overloaded function type>' to 'std::function<void *(void *)>' 

は、私はこのコードで欲しいものを達成するために、どのような方法がありますか簡単にアプローチをしてもらいます存在する?

+3

問題は表示されているコードに表示されているのではなく、表示しないようにしたコードにあります。エラーを再現する[MCVE]と入力し、それ以外の場合はコンパイルは最小限に抑えてください。あなたの変数名は違法なので、擬似コードはまったく無関係の理由でコード化することはできません。 – Yakk

答えて

2

fooFunctionの複数のオーバーロードがあります。

オーバーロードが1つのみ(署名に一致する)関数名を使用します。また

、ラムダでラップ:

auto *bob = new MyClass(); 
bob->bind([](void*ptr)->void*{return fooFunction(ptr);}); 

とポインタを機能させるステートレスラムダ、暗黙のキャストに依存しています。

+0

ええ、関数定義に間違った型を書きました。コード内に同じ名前の2つの関数がありました。私は別の質問がありますが、私は将来もっと詳細な質問をします。 –

関連する問題