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

标签 c++ c++11 templates

我想做这样的事情:

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/

相关文章:

c++ - 使用顶点缓冲对象渲染不同的三角形类型和三角形扇形? (OpenGL)

html - QT html和CSS转pdf文件

c++ - 如何在函数内运行 Mersenne Twister?

c++ - 为什么要有 move 语义?

c++ - 存储多种类型并根据请求返回单一类型

c++ - 推断类型是否来自模板类的方法

c++ - 如果我将数字存储为整数数据类型,如何检查一个数字是否存在于另一个数字中?

c++ - 用模板复制构造函数替换默认复制构造函数

c++ - C++ 中的常量变量

php - 在 CodeIgniter 中创建主模板