POD和模板
这是一个POD吗?
template struct Data { float val_f; T val_t; int val_i; };
如果我有一个C函数需要类似的东西:
struct Data { float val_f; double val_t; int val_i; };
我可以传递一个Data
对象吗?
PS。 我猜答案是肯定的,因为在编译时, Data
将被转换为上面的结构并且将是POD结构。 我需要公正和(知情)确认。
在回答第一个问题时,它取决于模板参数T
如果T
是POD,则Data
将是POD。
在回答第二个问题时,具有相同定义的类不是相同的类型,因此您不能互换使用它们。 第一个示例中的Data
与第二个定义中的Data
不是同一类型。 (无论如何,要将它们放在同一个程序中,您必须为它们指定不同的名称。您不能拥有与类同名的模板。)
这取决于你作为T
传递的类型。 如果您使用POD
类型进行实例化,那么是。
如果您有权访问c++0x
或Boost,您应该可以通过特征std::is_pod
进行检查。
希望这可以帮助。