gpt4 book ai didi

c++ - 返回不同的数据类型而不明确指定数据类型

转载 作者:行者123 更新时间:2023-11-30 01:09:27 25 4
gpt4 key购买 nike

我想做这样的事情:

template<class T>
T foo(uint8_t x)
{
if (x<32) return ((int32_t)1<<x);
else return ((int64_t)1<<x);
}

但我不想调用foo<int32_t>(x)foo<int64_t>(x) .它看起来不太好。我希望自动正确推导返回类型。

预期用法示例:

std::max(foo(10),some_variable); // return type of foo need to match some_variable
std::min(foo(32),another_variable);

解决方案不一定是模板。如果宏可以达到同样的效果,我很乐意使用宏。有什么建议吗?

最佳答案

函数(甚至是模板函数)的返回类型——事实上,任何表达式,如果我没记错的话,这就是为什么 Gill 的回答没有解决任何问题——是 < strong>编译时属性。您在代码中想要的是运行时决定。这是一个无法直接解决的基本冲突(即使是 typedef 也无法解决矛盾,阿法克斯)。

可以做的是使用某种句柄或容器。例如,您始终可以只返回一个 64 位整数,从某种意义上说,它是较短特化的基本类型(即,您始终可以将 short int 转换为 64 位 int,但不一定反之亦然)。

你也可以编写更复杂的东西(大数字类,多态类,等等),但本质是一样的:返回类型将在编译时固定,并且该类型能够以某种方式存储所有可能的值,并有一些关于它实际上是什么“类型”的运行时信息(如果所有值都是整数,运行时信息就是值本身),并且可能带有强类型转换方法。

关于c++ - 返回不同的数据类型而不明确指定数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302786/

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