【发布时间】:2019-06-27 18:10:51
【问题描述】:
我有两个需要以下功能的功能:
功能1:需要变量的地址来设置值。 (它知道正确的类型)
函数2:是一个需要类型值的重载函数。
我需要一种基于枚举(指定要使用的类型)返回不同类型的方法。
我尝试使用 std::get ,因为您可以使用数字来指定类型。 然而,它要求 SelectedType 是一个常量表达式,而事实并非如此。
std::variant<uint8_t,int8_t,uint16_t,int16_t,double,float> Var;
std::get<SelectedTypeEnum>(Var)
重点是使用一个变量来避免代码重复。
考虑以下代码:
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:*/ }
【问题讨论】:
-
template <Type type> auto GetTypeToUse()怎么样?Type可以是编译时间常数吗? -
哦,这部分已经由我正在使用的库提供,我将它添加为上下文。我需要弄清楚如何编写Function 2。使用 Function 1 只有一种类型,因此您只需执行 &std::any_cast
-
C++ 是一种强类型语言。每个函数都有一个固定的返回类型。但是,您打算做的事情要求您的函数具有多个返回类型,具体取决于函数参数值,这与强类型相矛盾,所以不,您将无法到达那里,至少不是这样你打算...
标签: c++ templates sfinae std-variant stdany