这是我正在尝试做的简化版本
template <typename T>
class myClass {};
auto p = new myClass<int32_t>;
int TSizeOfP = sizeof(??);
Run Code Online (Sandbox Code Playgroud)
所以我想从对象指针获取我在myClass之外设置为int32_t的T.
显然我知道我把它设置为什么所以我可以做= sizeof(int32_t)但我希望能够只声明一次类型而不必遍历我写了sizeof(int32_t)的所有地方,如果我决定改变类型.
我也可以做一些像#define pType int32_t或者使用语句或其他什么的东西,但是如果有办法没有额外的行,我想听听它.
您可以编写具有部分特化的模板类,并使用辅助函数来完成它.
template <typename T>
struct template_parameter_type {
};
template <typename T, template <typename> class C>
struct template_parameter_type<C<T>> {
typedef T type;
};
template <typename T>
auto get_size(T*) {
return sizeof(typename template_parameter_type<T>::type);
}
Run Code Online (Sandbox Code Playgroud)
然后
auto p = new myClass<int32_t>;
int TSizeOfP = get_size(p);
Run Code Online (Sandbox Code Playgroud)