POD和模板

时间:2011-08-27 14:14:01

标签: c++ c pod

这是POD吗?

template <class T>
struct Data {
  float val_f; 
  T val_t;    
  int val_i;  
};

如果我的C函数需要类似的东西:

struct Data {
  float val_f; 
  double val_t;    
  int val_i;  
};

我可以代替一个Data<double>对象吗?

聚苯乙烯。 我想答案是肯定的,因为在编译时Data<dobule>将转换为上面的结构,并且将是POD结构。 我需要对此进行公正和(知情)确认。

2 个答案:

答案 0 :(得分:14)

在回答第一个问题时,它取决于模板参数T。如果Data<T>是POD,T将是POD。

在回答第二个问题时,具有相同定义的类不是相同的类型,因此您不能互换使用它们。第一个示例中的Data<double>与第二个定义中的Data类型不同。 (无论如何,要将它们放在同一个程序中,您必须为它们指定不同的名称。您不能拥有与类同名的模板。)

答案 1 :(得分:3)

这取决于您作为T传递的类型。如果您使用POD类型进行实例化,则为是。

如果您可以访问c++0x或Boost,则可以通过特征std::is_pod<mytype>进行检查。

希望这有帮助。