1

問題が発生しました。基本的には、以下のコードで説明できます。

void (*fn_ptr)();

template<typename T> void Second(){
    //do something
}

template<typename T> void First() {
    //do init
    fn_ptr = Second<T>;
}

関数Firstと関数Secondの両方が必要でありtemplate function、関数ポインタを介してのみ呼び出されますfn_ptr。関数Firstは、関数が呼び出される前に一度呼び出される必要がありますSecond。関数 Second を手動で呼び出す必要はありません。fun_ptrしたがって、どこかで使用する前に行うべき唯一のことは次のとおりです。

fn_ptr = First<SomeType>;

質問があります:どうすれば人々がこれをしないようにすることができますか:

fn_ptr = Second<SomeType>;

Firstps:関数と関数Secondがそうでない場合の方法を知っていますtemplate function

4

2 に答える 2

0

詳細は省きますが、クラスを使用すると fn_ptr = ... が関数になります。次に、関数で fn_ptr がまだ NULL であるかどうかをテストできます。その場合、rhs は最初のクラスに動的にキャスト可能でなければなりません。

そうでなければ、エラーを防ぐために多くのことができるかどうかはわかりません。

于 2012-12-15T02:03:01.637 に答える
0

最後に、私はそれを機能させることができました。2 つの関数をクラス テンプレートの静的メンバー関数にするだけです。

template<typename T> class Foo{
public:
void First() {
    //do init
    fn_ptr = Second<T>;
}

private:
void Second(){
    //do something
}
};

その後:

fn_ptr = Foo<SomeType>::First; // OK
fn_ptr = Foo<SomeType>::Second; // Error: Second is inaccessable

私が言いたいのは、ヒイラギのたわごとです。関数がそれにプライベート静的メンバー関数を割り当てたfn_ptr後、うまく機能します。Firstまあ、VC++ 2012 で動作します。ISO 標準に準拠しているかどうかはわかりませんが、移植可能だと思います。

于 2012-12-15T07:36:09.277 に答える