这是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结构。
我需要对此进行公正和(知情)确认。
答案 0 :(得分:14)
在回答第一个问题时,它取决于模板参数T
。如果Data<T>
是POD,T
将是POD。
在回答第二个问题时,具有相同定义的类不是相同的类型,因此您不能互换使用它们。第一个示例中的Data<double>
与第二个定义中的Data
类型不同。 (无论如何,要将它们放在同一个程序中,您必须为它们指定不同的名称。您不能拥有与类同名的模板。)
答案 1 :(得分:3)
这取决于您作为T
传递的类型。如果您使用POD
类型进行实例化,则为是。
如果您可以访问c++0x
或Boost,则可以通过特征std::is_pod<mytype>
进行检查。
希望这有帮助。