Pass Void как параметр функции

У меня есть функция, которая должна принимать параметр любого типа. Поэтому я использую шаблоны.

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 в качестве аргумента функции?

5

Решение

Почему бы просто не указать перегрузку без шаблона?

void* Callback;

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

void Function()
{
(function<void()>)Callback();
}
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]