【发布时间】:2015-05-22 20:13:34
【问题描述】:
我有这样的数据结构
enum DataType_t{INT,FLOAT};
struct Data
{
DataType_T type;
void* min;
void* max;
};
变量min 和max 取决于type 的值。我想知道是否有办法创建std::map 之类的
std::map<DataType_t, SomeFcnPtr> myMap;
myMap[INT] = ?? // Here should be a pointer to a function like int(*FcnPtr)(Data d, bool min);
myMap[FLOAT] = ?? // Here should be a pointer to a function like float(*FcnPtr)(Data d, bool min);
有没有办法创建这样一个具有不同返回数据类型的函数指针的映射?
最后我想用它来规范化值
float normalizedValue = (readValue - mayMap[INT](intData, true)) / (mayMap[INT](intData, false) - mayMap[INT](intData, true))
我读过this post,看起来很相似,但不理解提议的想法,也许你可以举个例子。
编辑
我将对我正在尝试的内容添加更多解释。 struct Data 有一个字段 DataType_t type。根据type 的值,我需要正确转换min 和max 字段以使其正确表示为int 或float。一种可能的方法是
int getMinOrMaxForINT(Data aData, bool min)
{
if(min) return *((int*)aData.min));
return *((int*)aData.max));
}
类似
float getMinOrMaxForFLOAT(Data aData, bool min)
{
if(min) return *((float*)aData.min));
return *((float*)aData.max));
}
终于在一些函数处理Data变量我可以做
void someFunction(int value, Data aData)
{
float normalizedValue = 0;
if(aData.type == DataType_t::INT)
{
normalizedValue = (value - getMinOrMaxForINT(aData, true)) / (getMinOrMaxForINT(aData, false) - getMinOrMaxForINT(aData, true));
}
else if(aData.type == DataType_t::FLOAT)
{
normalizedValue = (value - getMinOrMaxForFLOAT(aData, true)) / (getMinOrMaxForFLOAT(aData, false) - getMinOrMaxForFLOAT(aData, true));
}
}
您注意到代码与getMinOrMaxForXXXX 完全相同,除了返回和强制转换类型。我想过使用像
template <typename T>
T getMinOrMax(Data aData, bool min)
{
if(min) return *((T*)aData.min));
return *((T*)aData.max));
}
但问题是如何让地图获得指向特定专业的指针,例如
myMap[DataType_t::INT] = //PointerTo getMinOrMax<int>
myMap[DataType_t::FLOAT] = //PointerTo getMinOrMax<float>
这可以帮助我简化流程函数中的函数代码
void someFunction(int value, Data aData)
{
float normalizedValue = (value - myMap[aData.type](aData, true)) / (myMap[aData.type](aData, false) - myMap[aData.type](aData, true));
}
【问题讨论】:
-
@Jarod42 你能给我举个例子吗?我看不出 boost::variant 有什么帮助。
-
您的示例代码不一致。如果 myMap 值是函数指针,为什么它们有 getMin、getMax 方法?
-
抱歉@simon,编辑了我的问题以反映 myMap 值是指向函数的指针。我认为现在是一致的,关于如何构建这样一个地图的任何想法?
-
好吧,因为 INT 属于 DataType_t,我假设它可以用作 myMap[SomeVariable] 其中 someVariable 属于 DataType_t。
-
@BRabbit27: 但是你现在是编译时那一行的返回类型吗?
标签: c++