是否可以将Dword强制转换为Type Name?

时间:2019-05-28 07:30:50

标签: c++ dword

让我们看看这种代码:

// Return me Dword of int
dword t = GetValueTypeNo<int>();
//here trying to tell to GetValue that my template is int (since t is dword of int)
int test5 = myVector.GetValue<t>("test5");

当然,这种代码不起作用,实际上是无用的。但是有可能这样做吗?将dword转换为类似int的类型名称?

2 个答案:

答案 0 :(得分:2)

如果可以将GetValueTypeNo用作constexpr函数,则可以执行以下操作:

template<typename T>
constexpr dword GetValueTypeNo() { ... }

template<dword>
struct Type_selector;

template<>
struct Type_selector<dword_value_for_int> {
    using Type = int;
};

template<>
struct Type_selector<dword_value_for_long> {
    using Type = long;
};

...

template<dword type>
using Type = typename Type_selector<type>::Type;

然后写:

template<dword type>
Type<type> GetValue(...)
{ ... }

constexpr dword t = GetValueTypeNo<int>();
int test5 = myVector.GetValue<t>("test5");

答案 1 :(得分:0)

您可以使用decltype关键字:

dword t = GetValueTypeNo<int>();
int test5 = myVector.GetValue<decltype(t)>("test5");

但是这里GetValue的模板参数将是dword而不是int。