我想要做的是创建一个接受任何类或结构的函数(通过模板),但也让函数假定传入的类或结构中总是有一个特定的成员。
在可能不正确的代码中,它看起来像这样:
template <class inputType>
int doSomething(inputType voxel)
{
return voxel.density;
}
我希望它假设density
成员将永远存在,并且它始终是int
(或其他)。我能这样做吗?如果是这样,如果density
不存在会发生什么?它会简单地抛出编译错误吗?
答案 0 :(得分:5)
这是完全合法的,C ++中的模板无法与不同的方法(想想Java)相比,类型通过保持类型变量来检查泛型方法。
使用您正在使用的每种可能类型编译C ++模板,因此每种特定类型的每个实例都被编译并进行类型检查。如果您尝试访问未使用doSomething
类型的字段,则会出现编译错误。
答案 1 :(得分:1)
你绝对可以这样做,模板将在编译时实例化,如果类型没有该成员,它将无法编译,你将收到并发生错误。模板函数基本上是契约,只要您使用的类型符合合同,它就会起作用。
在这种情况下,我还建议您进行实验,像LiveWorkSpace这样的网站可以让您轻松轻松地尝试使用C / C ++,并且支持最新版本。通过尝试这样的事情你会学到很多东西。您可以在之前的thread中找到更多此类工具。