当模板代码需要在变量类型为
(假设程序在运行时跟踪将void*放入其中以确保仅检索与放入的相同类型,但它在编译时不知道将要存储在变量中的类型。)
编辑:还要假定未键入的存储隐藏在具有模板set()和get()方法的包装类后面,这些方法记录用于set()调用的T,如果用于get()调用不同的T,则抛出异常。所以问题实际上是关于包装类如何存储它。 (注意:包装类本身不是一个模板;只是它的方法set()和get()是模板。)
过去,当遇到这个问题时,我使用了
问题是,哪种方式更好(如果有):将
void *
的变量中存储 T *
,以便稍后可以检索并强制转换回 T *
,但它需要处理 T
和 T const *
时,应该使用 void *
还是 void const *
进行类型擦除存储?(任何一种选择都需要至少一个const转换。)(假设程序在运行时跟踪将void*放入其中以确保仅检索与放入的相同类型,但它在编译时不知道将要存储在变量中的类型。)
编辑:还要假定未键入的存储隐藏在具有模板set()和get()方法的包装类后面,这些方法记录用于set()调用的T,如果用于get()调用不同的T,则抛出异常。所以问题实际上是关于包装类如何存储它。 (注意:包装类本身不是一个模板;只是它的方法set()和get()是模板。)
过去,当遇到这个问题时,我使用了
union {void * p_nc; void const * p_c;};
但我想知道这是否比仅使用const_cast过度。问题是,哪种方式更好(如果有):将
T const *
的const转换为 void *
中的存储,还是在检索非const T *
时使用 void * const
进行存储并将const转换关闭?