gpt4 book ai didi

c++ - 如何编写一个返回其子函数返回类型的函数

转载 作者:行者123 更新时间:2023-12-03 03:07:04 25 4
gpt4 key购买 nike

我想编写一个函数,调用多个子函数并返回这些子函数的结果。

sub functions:
template<class A> A sub1(A a)
template<class B> B sub2(B b, int i)
template<class C> C sub3(C c, string p)

该函数将在 switch 语句中相应地调用它们。抱歉,我只有伪代码,因为我对问题感到困惑并且没有开始编写代码。

mf(string s)
{
int k;
k = process(s)
string
switch (k){
case 0:
return sub1(k);
case 1:
return sub2(s, k);
case 2:
return sub3(k, s);
default:
break;
}
}

由于现在没有返回类型,我如何定义上面的 mf ?再次使用模板?顺便说一句,我的 c++ 编译器确实支持我不太熟悉的 c++ 11 标准。

最佳答案

C++ 基本上是一种静态类型语言,这意味着所有类型的表达式都是在编译时而不是运行时决定的。

在静态类型语言中使用动态类型是可能的,但不建议广泛使用。因为这样做您将放弃该语言提供的几乎所有多态性功能。您必须手动检查类型,或者实现您自己的基于动态类型的多态性。

如果返回的数据不太复杂,标记结构通常是一个好主意:

struct Value
{
enum {INT, FLOAT, PTR} type;
union
{
int int_data;
float float_data;
void *ptr_data;
};
};

对于需要支持大量操作的更复杂的数据类型,您应该考虑使用抽象接口(interface)和继承。

如果您认真考虑了该问题,并且认为上述方法均不适用于您的问题,并且动态类型是最好的方法,那么这里有一些选项:

  • boost::any -- 所有类型的唯一容器。使用前需要测试类型并手动转换。

  • boost::variant -- 类似 union 的容器,通过 boost::static_visitor 支持一元多态操作。

  • 一些编程框架有自己的动态类型支持。 Qt 中的QVariant 就是一个例子。如果您使用这样的框架,通常建议使用它们而不是其他库中的其他内容。

关于c++ - 如何编写一个返回其子函数返回类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765855/

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