c++模板-传递类成员
C++ Templates - Passing Class member
好了!
我在这里遇到了一个小问题,为了使它更简单,这或多或少是这样的:
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
的值传递给模板,因为:
- 模板参数是编译时的,你的值是运行时的。
- 非类型模板形参不能是任何对象类型,只能是整型(或enum)、指向对象/函数的指针/引用或指向成员的指针。
编辑:已将模板修改为template<ObjectType& x>
。这对于引用对象是正确的。但是,mygame.a
不是一个引用,它是一个值。要指定成员,必须使用语法&mygame::a
,这迫使您使用指向成员的指针。
相关文章:
- 静态数据成员模板专用化的实例化点在哪里
- 不明确的成员模板查找
- 如何定义可变参数类模板的成员模板功能
- 命名类成员模板函数的实例
- 如何声明指向成员模板函数的指针?
- 什么是指向成员模板参数的指针
- 为指向成员模板参数的指针推导额外模板参数类型的紧凑方式
- 如何调用此成员模板函数?
- thread_local静态成员模板定义:初始化失败,GCC
- 成员模板函数指针错误
- C++关于非专用模板的成员模板专业化的标准段落
- C++属于模板类的成员模板的显式专用化
- C++成员模板专用化语法
- 成员模板别名与另一个模板成员
- C++推断指向成员模板参数的指针
- 用户定义类型的成员模板
- 如果未实例化成员模板,是否要评估static_asserts?
- 将函数指针成员模板限制为仅派生类
- 成员模板专用化不使用 clang 进行编译
- 实例化成员模板函数时的Buggy(?)编译器行为