是否可以在模板化类之外获取指定的模板类型?

use*_*993 3 c++ templates

这是我正在尝试做的简化版本

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或者使用语句或其他什么的东西,但是如果有办法没有额外的行,我想听听它.

son*_*yao 5

您可以编写具有部分特化的模板类,并使用辅助函数来完成它.

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)

生活