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

Clo*_*kex 5 c++ templates member

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

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

template <class inputType>
int doSomething(inputType voxel)
{
    return voxel.density;
}
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ack 5

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

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