gpt4 book ai didi

c++ - 函数可以返回类型吗?

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

我想知道是否有任何方法可以在C++中执行以下操作:

$(some typename) func() {
if (/*condition*/) return int;
else return bool;
}
编辑:我想我还不够清楚。我想知道您是否可以这样说: func() var = /*something*/。基本上,该函数返回类似 intbool(类型,而不是该类型的值)的信息。

最佳答案

函数无法选择在运行时返回哪种类型;它在编译时必须具有确定的返回类型。您可以使用的是具有成员类型的模板。为此,您将需要使用模板元编程。例如,下面是一个适配器模板,它将T类型转换为其const指针形式:

template <typename T>
struct make_const_ptr {
using type = const T*;
};

template <typename>
using make_const_ptr_t<T> = typename make_const_ptr<T>::type
从本质上讲,这是一个返回类型的“函数”,即您可以通过编写 make_const_ptr_t<T>来“调用”它。您可以使用模板元编程 https://www.geeksforgeeks.org/template-metaprogramming-in-c/对类型进行更多操作。
另外,您在评论中说,您想使用它来选择要在多态类型上使用的模板函数。更好的方法是使用虚函数。为不同的多态类型做不同的事情是虚函数的重点:
template <typename T>
void template_function(const T& obj) {
// ...
}

class Base {
// ...
virtual void do_template_function() = 0;
};

class D : public Base {
virtual void do_template_function() {
template_function<D>(*this);
}
};

class E : public Base {
virtual void do_template_function() {
template_function<E>(*this);
}
};

void f(Base* obj) {
// ...
obj->do_template_function();
// ...
}

关于c++ - 函数可以返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64432810/

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