我可以从模板中访问struct / class成员吗?

时间:2013-04-17 00:18:51

标签: c++ templates member

我想要做的是创建一个接受任何类或结构的函数(通过模板),但也让函数假定传入的类或结构中总是有一个特定的成员。

在可能不正确的代码中,它看起来像这样:

template <class inputType>
int doSomething(inputType voxel)
{
    return voxel.density;
}

我希望它假设density成员将永远存在,并且它始终是int(或其他)。我能这样做吗?如果是这样,如果density不存在会发生什么?它会简单地抛出编译错误吗?

2 个答案:

答案 0 :(得分:5)

这是完全合法的,C ++中的模板无法与不同的方法(想想Java)相比,类型通过保持类型变量来检查泛型方法。

使用您正在使用的每种可能类型编译C ++模板,因此每种特定类型的每个实例都被编译并进行类型检查。如果您尝试访问未使用doSomething类型的字段,则会出现编译错误。

答案 1 :(得分:1)

你绝对可以这样做,模板将在编译时实例化,如果类型没有该成员,它将无法编译,你将收到并发生错误。模板函数基本上是契约,只要您使用的类型符合合同,它就会起作用。

在这种情况下,我还建议您进行实验,像LiveWorkSpace这样的网站可以让您轻松轻松地尝试使用C / C ++,并且支持最新版本。通过尝试这样的事情你会学到很多东西。您可以在之前的thread中找到更多此类工具。