这最初是通过尝试从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传递给它以允许演绎,但我希望有一种方法可以手动推断出类型,并直接在模板参数中使用它。
正如我所说,这现在更具学术性而不是真实性,这就是为什么代码如此做作,但我很想知道是否有办法实现它。
答案 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编译了它,它似乎可以正常工作。