Есть ли способ узнать, какой тип возврата функции (или даже лучше указателя функции)?
У меня есть следующий код, который ломается, когда я использую функцию voidуказатель, но отлично работает для любого другого типа возврата.Ошибка, которую я получаю при использовании указателя на функцию void из gcc 4.5:
error: значение void не игнорируется, так как оно должно быть
Что имеет смысл.Поэтому, очевидно, мне нужно проверить, возвращает ли указатель на функцию что-то, а затем получить результат и вернуть его.
template <class F,typename R> class Instruction
{
protected:
F (func);
R result;
public:
template <typename T>
Instruction(T const& f)
{
func = &f;
};
template <typename A> void execute(A const& a)
{
result = (func)(a);
};
template <typename A> void execute(A const& a,A const& b)
{
result = (func)(a,b);
};
template <typename A> void execute(A const& a,A const& b,A const& c)
{
result = (func)(a,b,c);
};
R get_result()
{
return result;
};
};
Обычно я использую указатель на функцию, которая выполняет что-то в основном арифметическое, и я могу позаботиться олюбой тип возвращаемого значения в экземпляре, кроме функций void.Я попытался создать экземпляр как:
Instruction<ptr2func2,void> foo(bar);
Instruction<ptr2func2,(*void)> foo(bar);
, но в обоих случаях это не удалось.
Второй аргумент шаблона при создании экземпляра используется для определения типа возвращаемого значения.