如果让模板类本身返回模板成员
如
template <typename T, typename T2>
class CTest
{
public:
T p;
CTest(T & t){p = T;};
.........
};
使用时CTest <CString, CString> m_testString( "hello world ");
问题:如何让 m_testString本身就象一个CString那样, 不需要再去访问成员p;
比如
m_strString.Left(....) // Left是CString的函数
[解决办法]
m_strString.Left(....)这样是有点困难,
不过
m_strString-> Left(....)这样的话就好说多了
CTest 重载operator-> 返回一个p的指针.
[解决办法]
template <CString, CString>
class CTest
{
public:
CString p;
CTest( CString & t){p = t;};
Left(....) { p.Left() }
.........
};
特化就行了
[解决办法]
template <typename T>
class CTest
{
public:
T p;
CTest(const char* t):p(t){};
T* operator-> ()
{
return (&p);
}
};
int main(int,char*[])
{
CTest <std::string> xxx( "aaaaaaa " );
cout < < xxx-> length() ;
return 0;
}
[解决办法]
正因为多人协作,所以才更应该改动调用方式。
如果偷懒点,可以考虑CTest才CString派生,不过因为CString设计的时候恐怕没有考虑要被派生,所以只是勉强可用。