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

时间:2016-02-19 03:56:22

标签: c++ templates

以下是我尝试做的简化版

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或者使用语句或其他什么的东西,但如果有办法在没有额外的行的情况下这样做,我想听听它。

3 个答案:

答案 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);

fast builtin

答案 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;
}

更紧凑的嵌套结构。