以下是我尝试做的简化版
template <typename T>
class myClass {};
auto p = new myClass<int32_t>;
int TSizeOfP = sizeof(??);
所以我想从对象指针中获取我在myClass之外设置为int32_t的T。
显然我知道我设置了什么,所以我可以做= sizeof(int32_t),但我希望能够只声明一次类型,而不必遍历我编写sizeof(int32_t)的所有地方我决定改变类型。
我也可以做一些像#define pType int32_t或者使用语句或其他什么的东西,但如果有办法在没有额外的行的情况下这样做,我想听听它。
答案 0 :(得分: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);
}
然后
auto p = new myClass<int32_t>;
int TSizeOfP = get_size(p);
答案 1 :(得分:3)
如何使尺寸成为会员?
template <typename T>
class myClass
{
typedef T type;
static constexpr std::size_t TypeSize = sizeof(T);
};
//...
std::size_t TSizeofP = p->TypeSize;
答案 2 :(得分:3)
试试这个:
#include <iostream>
using namespace std;
template <template<typename> class TT, typename T>
int typesizeof(TT<T>*& o) {
return sizeof(T);
}
template <typename T>
class myClass {};
int main() {
auto p = new myClass<int32_t>;
cout << typesizeof(p);
return 0;
}
更紧凑的嵌套结构。