2

関数シグネチャをテンプレート引数として使用したいと思います。クラスではうまく機能しますが、関数テンプレートで同じトリックを試すと、msvc はエラーをスローします。

エラー C2768: 'Func': 明示的なテンプレート引数の不正な使用

これが私のコードです:

template <typename Signature>
void Func();

template <typename R, typename A1>
void Func<R(A1)>();

機能させるにはどうすればよいですか?

4

1 に答える 1

4

言語でサポートされていない関数テンプレートを部分的に特殊化することはできません。できることは、部分的に特殊化されたクラステンプレートを静的メンバー関数で作成することです。場合によっては、そのクラス テンプレートをインスタンス化して静的関数を呼び出すトランポリン関数を作成することもできます。

このようなもの:

namespace detail
{
    template<typename Signature>
    struct helper;

    template<typename R, typename A1>
    struct helper<R(A1)>
    {
        static void call()
        {
            // Do stuff with R and A1...
        }
    };
}

template<typename Signature>
void Func()
{
    detail::helper<Signature>::call();
}
于 2013-05-04T10:17:53.327 に答える