获取模板中变量的类型

时间:2014-11-12 03:59:47

标签: c++ templates

这最初是通过尝试从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传递给它以允许演绎,但我希望有一种方法可以手动推断出类型,并直接在模板参数中使用它。

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

1 个答案:

答案 0 :(得分:2)

这是怎么回事:

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编译了它,它似乎可以正常工作。