如何实现一个获取类和指向该类成员的指针的模板?
我想创建一个类似Accessor
的表单模板
template<??? T, ??? P>
class Accessor
{
// ...
T& setMember(const Vector3d& point)
{
T& obj = getObject<T>();
obj.*P = point;
return obj;
}
};
这里有一个类T
,它有一个成员P
,两个都是模板变量。我知道P
总是Vector3d
类型。但是我必须停留在C17。当然,如果你有C20技术...我想知道!
同样,Accessor
没有任何对T
对象的引用,但是函数getObject
在这里神奇地处理了它,因此这里不需要关心。
我想这样使用它:
class Accessed
{
Vector3d one_point;
Vector3d another_point;
class OneAccessor : public Accessor<&one_point> {};
class AnotherAccessor : public Accessor<&another_point> {};
}
注意格式:public Accessor<&one_point>
.
也许是public Accessor<&Accessed::one_point>
。
我宁愿
public Accessor<one_point> // or
public Accessor<Accessed::one_point>
而不使用&
。我希望推断出Accessed::
。
如果你对我的问题有答案,我很想看看。
3条答案
按热度按时间yr9zkbsy1#
类成员指针的类成员类型可以通过trait找到,但是,语法
Accessor<decltype(&Accessed::one_point)>
elimination可能需要一个推导指南,我把它留给你。假设
Accessor
将具有Accessed
成员的内部状态,则可以按如下所示舍入解决方案:See a live demo in godbolt.org
以下内容,请交给OP:
Vector3d
,getObject<T>()
等。xuo3flqw2#
使用变量的另一个版本:
tkqqtvp13#
我并不真正了解您的使用情形,但要回答以下问题:可以将成员函数用作模板的非类型参数。下面的代码演示了其语法: