0

テンプレート引数の関数またはメンバー関数ポインターを関数クラスに変換する方法は? 関数クラスがメンバー関数を定義するクラスであるとしましょうoperator()

テンプレートでの関数とメンバー関数の使用を一般化すると便利だと思います。

例えば、

template<..., class FunClass>
class MyClass {};

次に、FunClass は、MyClass の要件に従って、さまざまな数の引数を持つすべての種類の関数ポインター、メンバー関数ポインターから変換できます。変換を行う簡単な方法はありますか? ありがとう。

4

1 に答える 1

1

コメントの議論に従ってください: この方法で抽出できます: (ここConvertToFunClassから盗まれました)

template<typename Sig>
struct Types;

template<typename RetType, typename ClassType, typename Arg0>
struct Types<RetType (ClassType::*)(Arg0)>
{
    typedef RetType return_type;
    typedef ClassType class_type;
    typedef Arg0 argument_0;
};

使用法はMyClass<T, R, Types<decltype(&MyFun)>::ClassType > a;.

(免責事項: 私はコードを試していません。コンパイラ ATM にアクセスできません。)

于 2013-01-01T14:42:55.410 に答える