-1
クラスをインスタンス化するメンバ関数を関数ポインタとして使用するにはどうすればよいですか? BEFOREC++ | funcポインタとしてメンバ関数を使用する方法
:
main.cpp :
void packetShower(data_t const& data) {
// showing so data
}
....
// called with :
std::shared_ptr<Net::ARawSocket> rawSock = std::make_shared<Net::LinuxRawSocket>(packetShower);
とそれは単に動作します。 packetShower
機能は今私main.cpp
に単純な静的メソッドだった:
は私が、私のrun()
方法では、packetShower
インスタンス機能
namespace App {
class Instance {
public:
Instance() = default;
~Instance() = default;
int run(int ac, char *av[]);
private:
void init();
void packetShower(data_t const& data)
};
}
でインスタンス化クラスInstance
を持っており、私のpacketShower
関数への関数ポインタを作成しようとしてください:
namespace App {
void Instance::init() {
...
}
void Instance::packetShower(data_t const& data) {
.....
}
int Instance::run(int argc, char** argv) {
init();
// and I tried :
void (Instance::*shower)(data_t const& data) = &Instance::packetShower;
std::shared_ptr<Net::ARawSocket> rawSock = std::make_shared<Net::LinuxRawSocket>(shower);
// but It generate a big error
}
}
どうすればいいですか?
ありがとうございます!
'Net :: LinuxRawSocket' ctorはどのようなタイプを受け入れますか? – Slava
私は次のエラーが発生します: 'Net :: LinuxRawSocket :: LinuxRawSocket(void(App :: Instance :: **)(const std :: vector&))'への呼び出しで一致する関数がありません。 ' しかし、私が言ったように、これを行う前の方法はfuncポインタで壊されていましたが、今はインスタンスメンバのfuncポインタを使って行います –
F4Ke
私の質問を読んで理解できますか?私はそれを言い換えることができます。 'Net :: LinuxRawSocket'コンストラクタでコールバックとして受け入れられる型の定義を提供できますか? – Slava