从智能指针确定类型

Sam*_*rsa 3 c++ templates

我有一个功能,目前有两个模板参数.一个预计是智能指针,另一个预计是对象类型.例如,SmartPtr<MyObject>作为第一个模板参数和MyObject第二个模板参数.

template <typename T, typename TObject>
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以MyObject从第一个参数自动确定第二个参数,SmartPtr<MyObject>以便我的模板函数编写如下:

template <typename T>
Run Code Online (Sandbox Code Playgroud)

并且TObject自动确定原始模板函数中的类型,T期望该类型是智能指针.

根据要求,这是函数声明及其用法:

template <typename T, typename TObject>
T* CreateOrModifyDoc(T* doc, MyHashTable& table)
{
    T* ptr = NULL;

    if (!table.FindElement(doc->id, ptr))
    {
        table.AddElement(doc->id, new TObject());
        table.FindElement(doc->id, ptr);
    }       

    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*n F 11

如果您知道第一个模板参数将是智能指针类型,为什么不使用一个参数声明您的函数并使用它:

template<typename T>
void WhatIsIt(SmartPtr<T> ptr)
{ 
    printf("It is a: %s" typeid(T).name());
}
Run Code Online (Sandbox Code Playgroud)

  • 真的吗?downvote因为我选择字符串作为示例代码?我刚刚做到了,功能体甚至不需要在那里...... (3认同)