我希望基本上结合指向某些数据及其类型的指针:
class DataPointer {
public:
DataPointer(T *data) : data_(data) {
}
inline double data() { return double(*data_); }
private:
T *data_;
};
在那里,data_是指向可以是不同类型的数据的指针,但是用户总是希望它作为double返回。您可以保留类型和数据,并在data()
函数中返回时切换类型,但这似乎比它需要的更难。
以下示例是超级设计的,但我认为它得到了重点:
#include "data_pointer.h"
enum Type {
kShort,
kInt,
kFloat,
kDouble
};
DataPointer d() {
Type t;
// char * is returned, but is actually a pointer to some other type indicated by
// the type parameter (void * would probably be the standard way of doing this)--
// this is a straight C library
char *value = getValueFromExternalSource(&type);
switch (type) {
case kShort: return DataPointer<short>(reinterpret_cast<short *>(value));
case kInt: return DataPointer<int>(reinterpret_cast<int *>(value));
case kFloat: return DataPointer<float>(reinterpret_cast<float *>(value));
case kDouble: return DataPointer<double>(reinterpret_cast<double *>(value));
}
}
int main(int argc, char *argv[]) {
float f = 13.6;
asi::DataPointer<float> dp(&f); // This works just fine
printf("%f\n", dp.data());
}
然而,编译在'DataPointer' does not name a type
的声明中给了我d()
这是有道理的,因为它没有与之关联的类型。
我很确定我误解了模板应该工作的方式,而且我几乎完全确定我缺少一些语法知识,但你能帮助解决这个问题吗?我对采取不同的做法持开放态度。
我正在运行g ++ 3.4.6,我知道这种情况已经过时了,但有时你会受到你无法控制的事情的限制。
感谢。
答案 0 :(得分:0)
您不希望在此处使用模板。如果您有一个可以是多种类型之一的值,则可以使用union。