gpt4 book ai didi

c++ - 在 C++ 中将类型作为返回类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:23 25 4
gpt4 key购买 nike

是否有可能从函数返回一个类型作为返回类型并使用类似这样的方法将其用于成员变量:

constexpr type myFunction(int a, int b){
if(a + b == 8) return int_8t;
if(a + b == 16) return int_16t;
if(a + b == 32) return int_32t;
return int_64t;
}

template<int x, int y>
class test{
using type = typename myFunction(x, y);
private:
type m_variable;
};

在 Qt 中尝试这个例子时它说

Error: 'constexpr' does not name a type
Error: 'test' is not a template type
class test{
^

在之前的问题中,有人向我展示了 http://en.cppreference.com/w/cpp/types/conditional此功能,但它仅适用于 2 种类型。

最佳答案

您不能使用普通函数执行此操作。但是,使用模板元编程很容易完成。这种模板有时称为类型函数

#include <cstdint>

template<int bits> struct integer { /* empty */ };

// Specialize for the bit widths we want.
template<> struct integer<8> { typedef int8_t type; };
template<> struct integer<16> { typedef int16_t type; };
template<> struct integer<32> { typedef int32_t type; };

可以这样使用。

using integer_type = integer<16>::type;
integer_type number = 42;

记得在integer<T>::type之前与 typename关键词如果T本身就是一个模板参数。

我将其作为练习留给您,将其扩展为接受两个整数作为参数并根据两者之和返回适当类型的模板。

关于c++ - 在 C++ 中将类型作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327066/

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