c++模板-传递类成员

C++ Templates - Passing Class member

本文关键字:成员 模板 c++      更新时间:2023-10-16

好了!

我在这里遇到了一个小问题,为了使它更简单,这或多或少是这样的:

window.h

template <ObjectType &x>
class foo { stuff }

game.h

class gameclass { ObjectType a; }

main.cpp

gameclass mygame;
foo<mygame.a> fooa;

现在fooa失败了,因为它不允许我将mygame的成员'a'作为模板参数发送。

现在我如何发送一个类成员作为模板参数?

谢谢

您似乎想要传递一个非类型模板形参,更具体地说,是一个指向成员的指针。对于您想要的,您必须使用:

template<ObjectType gameclass::* ptr>
struct foo
// ...

注意,只有当你有一个指向该对象的指针时,才允许你访问该对象的成员。

您可以在这里(指针到成员作为模板参数)或这里(指针到成员)获得更多详细信息。

注意,你不能在你发布的代码中将mygame.a的值传递给模板,因为:

  1. 模板参数是编译时的,你的值是运行时的。
  2. 非类型模板形参不能是任何对象类型,只能是整型(或enum)、指向对象/函数的指针/引用或指向成员的指针。

编辑:已将模板修改为template<ObjectType& x>。这对于引用对象是正确的。但是,mygame.a不是一个引用,它是一个值。要指定成员,必须使用语法&mygame::a,这迫使您使用指向成员的指针。