6

任意の型のパラメーターを受け入れる関数があります。したがって、テンプレートを使用します。

template <typename T>
void Function(T Parameter);

関数は関数を呼び出します。私の実際のアプリケーションでは、文字列キーを持つコールバックのマップがありますが、それはこの質問には関係ありません。コールバックは、戻り値の型がvoidの関数ポインターである必要がありますが、パラメーターの型は任意です。

void* Callback;

template <typename T>
void Function(T Parameter)
{
    (function<void(T))Callback(Parameter);
}

コールバックが正しいタイプであると仮定すると、これは次のように機能するはずです。

Function<int>(42);

// should result in...
(function<void(int))Callback(42);

しかし、場合によってはvoid、パラメーターとして渡したいことがあります。

Function<void>(void);

// should result in...
(function<void(void)>Callback(void);

ご覧のとおり、何も提供しないかvoid、パラメーターとして提供する必要があります。voidしかし、引数として渡すことはできません。型名が正しくないというエラーがあります。

void関数の引数として渡すにはどうすればよいですか?

4

1 に答える 1

9

非テンプレート オーバーロードを指定するだけです。

void* Callback;

template <typename T>
void Function(T Parameter)
{
    (function<void(T)>)Callback(Parameter);
}

void Function()
{
    (function<void()>)Callback();
}
于 2012-12-01T19:27:19.117 に答える