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

neosu 2007-06-26 02:58:06

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的函数
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neosu 2007-06-26
  • 打赏
  • 举报
回复
明白了。 谢谢大家。 我还是从根本上解决问题吧。
taodm 2007-06-26
  • 打赏
  • 举报
回复
正因为多人协作,所以才更应该改动调用方式。
如果偷懒点,可以考虑CTest才CString派生,不过因为CString设计的时候恐怕没有考虑要被派生,所以只是勉强可用。
neosu 2007-06-26
  • 打赏
  • 举报
回复
也就是说, 只能把CString的成员和函数都特化一下?

我这么做的原因是有一个代码不安全, 要改。 但因为是多人协作的, 不能改调用方式。 所以我打算用模板类把原来的变量代替一下。 保持接口一致。
  • 打赏
  • 举报
回复

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;
}
theendname 2007-06-26
  • 打赏
  • 举报
回复
template<CString, CString>
class CTest
{
public:
CString p;
CTest( CString & t){p = t;};
Left(....) { p.Left() }
.........
};

特化就行了
  • 打赏
  • 举报
回复
m_strString.Left(....)这样是有点困难,
不过
m_strString->Left(....)这样的话就好说多了
CTest 重载operator->返回一个p的指针.

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧