私は関数FooとクラスCDelegateを持っています。 CSpi1::m_Delegate();
関数ポインタへのconst参照
Foo
を呼び出したい
CInterruptDelegate CSpi1::m_Delegate(FreeFunction, 0);
:
typedef void (*typeFctPtr)(void*);
void Foo(void* dummy)
{
cout << "Foo\n";
}
class CDelegate
{
public:
CDelegate (const typeFctPtr& f_ref_Wrapper, void* f_pvSubscriber)
: m_ref_Wrapper(f_ref_Wrapper), m_pvSubscriber(f_pvSubscriber)
{
}
inline void operator()() const
{
(*m_ref_Wrapper)(0);
}
inline void operator=(const CInterruptDelegate& D)
{
}
private:
void* m_pvSubscriber;
const typeFctPtr& m_ref_Wrapper;
};
第二のクラスは、私はこのようなコンストラクタを使用して初期化する静的メンバstatic CDelegate m_Delegate;
を持っています
例外が発生しました(*m_ref_Wrapper)(0);
構文に問題がありますか?私がしようとしていることがまったく可能であるかどうかは、私は確信していません。私は、CDelegate
のコンストラクタが関数ポインタのconst参照を取っておらず、関数ポインタ自体を取るという実用的な解決法を持っています。私は問題なしで()演算子で関数を呼び出すことができます。関数のポインタ呼び出しを最適化できず、コンパイル時にすべてを知る必要があるので、const参照を使用して呼び出しを行うことを願っています。
あなたは単に 'm_ref_Wrapper(0)を呼び出す試してみましたか;'? – iammilind
オプティマイザが、参照またはポインタのどちらかを使って間接呼び出しを削除できる場合、私は驚いています。しかし、間接的な呼び出しは本当にそれほど高価ではありません。 –
@Cat Plus Plusでは、このメカニズムを組み込みシステムでの割り込み処理に使用しています。 boost :: functionは私が必要とするすべてを行いますが、遅いです。また、関数ポインタとして引数を取ってソフトウェアが動作しています。私は今const参照を使用して最適化したいです...少なくとも試みる:) – Mirco