获取模板中变量的类型

Getting the type of a variable in a template

本文关键字:类型 变量 获取      更新时间:2023-10-16

这最初是通过尝试从unique_ptr中提取类型而产生的,结果证明这很容易。然而,我现在对一般情况感兴趣。

以下是我想要的:

template<class CHILDOBJ>
void MyChildFunc()
{
    // do stuff with the CHILDOBJ type
};
template<class OBJTYPE>
void MyFunc(OBJTYPE obj)
{
   MyChildFunc<TYPE of OBJTYPE::child????>();
};
struct MyIntStruct
{
    int child;
};
struct MyDoubleStruct
{
    double child;
};
void main(void)
{
    MyIntStruct int_struct;
    MyDoubleStruct double_struct;
    MyFunc(int_struct);
    MyFunc(double_struct);
}

因此,我想要一种使用传递给MyFunc的对象中的属性类型来调用MyChildFunc的方法。我知道我可以创建另一个模板函数,并将obj.child传递给它以允许推导,但我希望有一种方法可以手动推导类型,并直接在模板参数中使用它。

正如我所说,这现在更像是学术性的,而不是真实的,这就是为什么代码如此做作,但我很想知道是否有办法做到这一点。

这是怎么回事:

template<class CHILDOBJ>
void MyChildFunc()
{
    // do stuff with the CHILDOBJ type
};
template<class OBJTYPE>
void MyFunc(OBJTYPE obj)
{
    MyChildFunc<decltype(OBJTYPE::child) >();
};
struct MyIntStruct
{
    int child;
};
struct MyDoubleStruct
{
    double child;
};

int main(int argc, const char * argv[])
{
    MyIntStruct int_struct;
    MyDoubleStruct double_struct;
    MyFunc(int_struct);
    MyFunc(double_struct);
    return 0;
}

我用Xcode 6编译了这篇文章,它似乎可以按预期工作。