6

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

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

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

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

4

2 回答 2

5

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

C++ 模板会使用您正在使用的每种可能的类型进行编译,因此每种特定类型的每个实例都会被编译和类型检查。如果您尝试访问不包含在您使用的类型中的字段doSomething,那么您将收到编译器错误。

于 2013-04-17T00:23:11.737 回答
1

您绝对可以这样做,模板将在编译时实例化,如果类型没有该成员,它将无法编译,您将收到错误消息。模板功能基本上是合同,只要您使用的类型符合合同,它就可以工作。

在这种情况下,我还建议您尝试一下,像C++ Shellonlinegbd.com这样的网站使您在任何地方都可以轻松轻松地尝试 C/C++,并且它们支持最新版本。通过尝试这样的事情,你会学到更多。

于 2013-04-17T00:35:38.370 回答