读书人

如果让模板类本身返回模板成员解决思路

发布时间: 2012-02-07 17:45:36 作者: rapoo

如果让模板类本身返回模板成员

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设计的时候恐怕没有考虑要被派生,所以只是勉强可用。

读书人网 >C++

热点推荐