gpt4 book ai didi

c++ - 带模板的条件返回类型

转载 作者:行者123 更新时间:2023-12-02 14:44:11 24 4
gpt4 key购买 nike

我想在 C++ 中使用与模板相关的条件返回类型。C++ 11、14 和 17 预览版可在我的环境中使用。

我对编程并不陌生,但我对 C++ 很陌生,并且对某些功能有点困惑。

我想要实现的是:

如果模板是 int32_t,我的返回类型将为 int64_tint16_t 将返回 int32_tint8_t 将返回 int16_t

实际上我对两者都使用通用模板:

template <class T, class T2>
static T2 Foo(T bar1, T bar2) { //do something }

int64_t x = Foo<uint32_t, uint64_t>(555555, 666666);

我希望通过仅键入参数类型来使其更加实用。

int64_t x = Foo<uint32_t>(555555, 666666);
int32_t x = Foo<uint16_t>(12000, 13000;
int16_t x = Foo<uint8_t>(88, 99);

我尝试使用 std::conditional 来实现它:

template<typename OtherType,
typename T = typename std::conditional<(sizeof(Type) <=
sizeof(OtherType)),
OtherType, Type>::type>

我愿意使用重载和疯狂的想法。

最佳答案

在 C++ 中执行此操作的惯用方法是使用特征。
举个例子:

template<typename> struct foo_ret;
template<> struct foo_ret<uint32_t> { using type = uint64_t; };
template<> struct foo_ret<uint16_t> { using type = uint32_t; };
// And so on...

现在甚至不再需要返回类型的模板参数:

template <class T>
static typename foo_ret<T>::type Foo(T bar1, T bar2) {};

您可以根据要求按如下方式调用它:

int64_t x = Foo<uint32_t>(555555, 666666);

或者如果您愿意,可以让编译器推导 T

关于c++ - 带模板的条件返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41496547/

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