15,447
社区成员




class DBComm
{
...
template<typename T>
T* operator[](DBTableType op)
{
std::map<DBTableType,DBTableOperator*>::iterator it=mapOfOperator.find(op);
if(it!=mapOfOperator.end())
{
return dynamic_cast<T*>(it->second);
}
return NULL;
}
...
};
struct DBComm
{
template<typename T>
T* operator[](int v)
{
return new T(v);
}
};
int main()
{
DBComm dbc;
double* v = dbc.operator[]<double>(10);
delete v;
}
d.operator[]<type>(...);
返回类型是无法自动推导的,只能显示提供。
显示提供的语法放在操作符上就很复杂。
class DBComm
{
public:
template<typename T>
T* Func(int op)
{
return NULL;
}
};
//main中调用
DBComm db;
int* p = db.Func<int>(3);
[/quote]
这个会哦
class DBComm
{
public:
template<typename T>
T* Func(int op)
{
return NULL;
}
};
//main中调用
DBComm db;
int* p = db.Func<int>(3);
template<typename T>//弄到这里来
class DBComm
{
...
T* operator[](DBTableType op)
{
std::map<DBTableType,DBTableOperator*>::iterator it=mapOfOperator.find(op);
if(it!=mapOfOperator.end())
{
return dynamic_cast<T*>(it->second);
}
return NULL;
}
...
};
调用是
DBComm<T> dbconn;
T* pT = dbconn[op]; //ok
template<typename T>//弄到这里来
class DBComm
{
...
T* Func(DBTableType op)
{
std::map<DBTableType,DBTableOperator*>::iterator it=mapOfOperator.find(op);
if(it!=mapOfOperator.end())
{
return dynamic_cast<T*>(it->second);
}
return NULL;
}
...
};
调用是
DBComm<T> dbconn;
T* pT = dbconn[op]; //ok