gpt4 book ai didi

c++ - 如何在模板实例化时确定函数的返回类型?

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:38 24 4
gpt4 key购买 nike

有没有办法找出函数(或者更好的函数指针)的返回类型是什么?

我有以下代码,当我使用 void 函数指针时它会中断,但对于任何其他返回类型都可以正常工作。使用 gcc 4.5 中的 void 函数指针时出现的错误是:

error: void value not ignored as it ought to be

这是有道理的。所以很明显我需要检查函数指针是否返回了一些东西,然后获取结果并返回它。

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);

但在这两种情况下都失败了。

实例化时的第二个模板参数用于定义返回类型。

最佳答案

试试template partial specializationvoid 上:

template <class F> class Instruction<F, void>
{
protected:
F (func);

public:

template <typename T>
Instruction(T const& f)
{
func = &f;
};

template <typename A> void execute(A const& a)
{
(func)(a);
};
template <typename A> void execute(A const& a,A const& b)
{
(func)(a,b);
};
template <typename A> void execute(A const& a,A const& b,A const& c)
{
(func)(a,b,c);
};
};

关于c++ - 如何在模板实例化时确定函数的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com