私はC++のコードを持っていると私は本当にそれでC関数を使用する必要があります。関数ポインタとC++のテンプレート
楽しいint procedure(... , S_fp fun , ...)
- 署名はそのようでなければならない関数へのポインタです:
int fun(double* , double* , double)
機能、私が使用したいポインタ、クラステンプレートのメンバーである:
template<int nPar> class PenaltyAlgorithm
{
public:
...
int Calculate(double* param, double* val, double prec)
{
...
}
...
}
あなたが見ることができるように、その署名は順序通りです。しかし、私がこれをするとき: プロシージャ(... & PenaltyAlgorithm :: Calculate、...);
私はエラーを取得する:
error: cannot convert ‘int (PenaltyAlgorithm<30>::*)(double*, double*, double)’ to ‘int (*)(...)’ for argument ...
してください、助けて。追加情報が必要な場合は、お書きください。
ありがとうございました!
答えを読んだ後、私はそれがクラスに関する情報を追加することが重要だと理解:
template<int nPar> class PenaltyAlgorithm
{
public:
int Calculate(double* param, double* val, double prec)
{
*val = comp_fun->Compute(param);
}
double* RunAlgorithm()
{
...
procedure(... &PenaltyAlgorithm<nPar>::Calculate, ...);
...
}
...
private:
...
CompositeFunction<nPar>* comp_fun;
}
1)。この楽しみはクラスのメンバーにアクセスする必要があるので、私は静的な楽しみを使用することはできません。
2)。私たちは、クラスの楽しいメンバーから「手続き」と呼ばれる事実を使用できますか?
あなたの署名が明らかに間違っているように、クラスに関数を呼び出す –
は、暗黙のthisポインタを渡す '' ....静的int型Calculがしてみてください。 [C++のよくある質問](http://www.parashift.com/c++-faq-lite/pointers-to-members.html)を読んでください。 – stonemetal