-7

好吧,伙计们!

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

窗口.h

template <ObjectType &x>
class foo { stuff }

游戏.h

class gameclass { ObjectType a; }

主文件

gameclass mygame;
foo<mygame.a> fooa;

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

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

谢谢你

4

1 回答 1

1

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

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

请注意,只有当您拥有指向该对象的指针时,才允许您访问该对象的成员。

您可以在此处 (pointer-to-member 作为模板参数)此处 (pointer-to-members)获得更多详细信息。

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

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

编辑:您已将模板更改为template<ObjectType& x>. 这对于引用 object是正确的。但是,mygame.a不是参考,而是价值。要指定成员,您必须使用语法&mygame::a,这会强制您使用指向成员的指针。

于 2013-04-06T21:37:43.683 回答