我有一个功能,目前有两个模板参数.一个预计是智能指针,另一个预计是对象类型.例如,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)