gpt4 book ai didi

c++ - 接受所有类型作为函数中的参数

转载 作者:可可西里 更新时间:2023-11-01 16:28:07 25 4
gpt4 key购买 nike

我如何在 C++ 中让一个函数接受每个对象,这样我就可以给它数字、字符串或其他对象。我在 C++ 方面不是很好,我希望这不是一个完全愚蠢的问题......

编辑:好的,举个例子:如果你想尝试将 std::cout 流包装到普通函数中,该函数应该能够接受所有东西——从 float 上的整数到复杂的对象。我希望现在更清楚了!

最佳答案

您可以为不同的类型重载您的函数,即

size_t func(int);
size_t func(std::string);

或者和/或另外,您可以提供函数模板,这是一种告诉编译器如何为任何特定类型生成函数的方法,例如

template<typename T>
size_t func(T const&) { return sizeof(T); }

您可以使用更高级的技术,例如 SFINAE 来有效地重载这些模板函数,即为不同类型的 T 使用不同的模板(即整数类型、指针、内置类型、pod , ETC)。然后,编译器将为它遇到的任何函数调用选择最合适的 func()(如果有的话),如果这是一个模板,则生成一个合适的函数。这不需要重新编码。

当函数需要在编码时解析预期类型时,一种完全不同的方法是使用通用删除类型,例如boost::any (相对于编译时):

size_t func(boost::any const&x)
{
auto i = boost::any_cast<const int*>(x);
if(i) return func(*i);
// etc for other types, but this must be done at coding time!
}

关于c++ - 接受所有类型作为函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096863/

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