【发布时间】:2016-05-22 03:28:33
【问题描述】:
我的类有一个静态 constexpr 成员函数 get,我需要它返回一个指向从模板参数生成的任意结构的第一个元素(声明为 char key;)的指针。
这就是我所拥有的:
template <char id, typename DataType, int... args>
struct MyStruct {
static constexpr DataType member { id, args... };
static constexpr void *get() {
return(&member.key);
}
};
只要 DataType 的所有成员(在第一个成员之后)都是 int 类型,这就会起作用,但是如果它们是 int 和 void * 的混合呢?我应该如何更改模板以允许这样做?
这是用于语言之间的外来函数接口,因此另一端检查密钥,并据此知道内存中跟随它的结构类型。
【问题讨论】:
-
当您在谈论
void *参数时,您是在谈论void *的类型,还是在谈论constexpr void *的值?如果是后者,我不确定您打算如何创建它们, -
@md5i 后者。它们适用于轻型伪 RTTI 系统。
template <typename Type> static constexpr void *makeTypeID()在template <typename Type> struct TypeStore {static constexpr char placeholder = 0;}中返回placeholder的地址,并且该地址用作该类型的唯一标识符。当前的问题是如何在 TypeStore 中存储更多的数据来处理向量等数据结构。