如何在c ++中返回模板化类?

时间:2014-02-06 02:39:31

标签: c++ c++03

我希望基本上结合指向某些数据及其类型的指针:

data_pointer.h

class DataPointer {
 public:
  DataPointer(T *data) : data_(data) {
  }

  inline double data() { return double(*data_); }

 private:
  T *data_;
};

在那里,data_是指向可以是不同类型的数据的指针,但是用户总是希望它作为double返回。您可以保留类型和数据,并在data()函数中返回时切换类型,但这似乎比它需要的更难。

以下示例是超级设计的,但我认为它得到了重点:

的main.cpp

#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,我知道这种情况已经过时了,但有时你会受到你无法控制的事情的限制。

感谢。

1 个答案:

答案 0 :(得分:0)

您不希望在此处使用模板。如果您有一个可以是多种类型之一的值,则可以使用union。