Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何基于枚举参数返回不同的类型_C++_Templates_Sfinae_Std Variant_Stdany - Fatal编程技术网

C++ 如何基于枚举参数返回不同的类型

C++ 如何基于枚举参数返回不同的类型,c++,templates,sfinae,std-variant,stdany,C++,Templates,Sfinae,Std Variant,Stdany,我有两个功能,需要以下功能: 函数1:需要变量的地址来设置值。它知道正确的类型 函数2:是一个重载函数,需要类型的值 我需要一种基于指定要使用的类型的枚举返回不同类型的方法 我尝试使用std::get,因为您可以使用数字来指定类型。 但是,它要求SelectedType是一个常量表达式,而不是 std::variant<uint8_t,int8_t,uint16_t,int16_t,double,float> Var; std::get<SelectedTypeEnum>

我有两个功能,需要以下功能:

函数1:需要变量的地址来设置值。它知道正确的类型

函数2:是一个重载函数,需要类型的值

我需要一种基于指定要使用的类型的枚举返回不同类型的方法

我尝试使用std::get,因为您可以使用数字来指定类型。 但是,它要求SelectedType是一个常量表达式,而不是

std::variant<uint8_t,int8_t,uint16_t,int16_t,double,float> Var;
std::get<SelectedTypeEnum>(Var)

不能根据传递给函数的枚举值返回其他类型。函数签名是在编译时设置的,因此任何改变它的东西都必须是编译时构造

如果必须返回只有在运行时才能知道的不同类型,那么可以使用std::variant或std::any。variant基本上是一个带标签的联合体,所以您必须指定它可以包含哪些类型。如果您有一组有界的类型,则这是首选的数据结构。如果有一组无限的类型,那么可以使用std::any。它使用类型擦除和动态内存分配,因此使用它比使用std::variant要昂贵得多,但这是获得无限灵活性所需的成本


如果对用例有意义的话,另一种选择是让所有类型从公共基类型继承。然后,您可以从函数返回指向base的指针,但可以使用对象多态性。

您不能基于传递给函数的枚举值返回其他类型。函数签名是在编译时设置的,因此任何改变它的东西都必须是编译时构造

如果必须返回只有在运行时才能知道的不同类型,那么可以使用std::variant或std::any。variant基本上是一个带标签的联合体,所以您必须指定它可以包含哪些类型。如果您有一组有界的类型,则这是首选的数据结构。如果有一组无限的类型,那么可以使用std::any。它使用类型擦除和动态内存分配,因此使用它比使用std::variant要昂贵得多,但这是获得无限灵活性所需的成本


如果对用例有意义的话,另一种选择是让所有类型从公共基类型继承。然后,您可以从函数返回一个指向base的指针,但要处理对象多态性。

模板自动GetTypeToUse如何?类型可以是编译时常量吗?哦,这部分已经由我正在使用的库提供了,我为上下文添加了它。我需要弄清楚如何编写函数2。函数1只有一种类型,因此您可以只执行&std::any_castC++是一种强类型语言。每个函数都有一个固定的返回类型。但是,您要做的是,根据函数参数值,要求函数具有多个返回类型,这与强类型性相矛盾,因此,不,您将无法达到目标,至少无法达到您想要的方式…模板自动获取类型如何?类型可以是编译时常量吗?哦,这部分已经由我正在使用的库提供了,我为上下文添加了它。我需要弄清楚如何编写函数2。函数1只有一种类型,因此您可以只执行&std::any_castC++是一种强类型语言。每个函数都有一个固定的返回类型。但是,您要做的是,根据函数参数值的不同,要求您的函数具有多个返回类型,这与强类型性相矛盾,因此,不,您将无法达到目标,至少无法达到您想要的方式。。。
enum Type{
Type_uint8_t,
Type_int8_t,
Type_uint16_t,
Type_int16_t,
Type_std::string
} TypeList;

GetTypeToUse(Type&){ /* Get/Set the type to use */ }

void SetValueBasedOnEnum(Type TypeToUse,void* ptr) {/* Function 1: Sets the value of the type */}

// This is a  Overloaded Function which supports all types in the enum. 
//"T" represents the type.
void DoStuffWithDifferentTypes(T ValueOfType) { /*Function 2:*/ }