关于模板的问题。VC支持成员函数模板化么?急,在线等待

fixopen 2002-01-23 12:26:19
VC支持成员函数模板化么?
如果支持,我该怎样使用?
如不支持,我有什么办法可以表示出这种意义?
我不能在类定义时,把该类型TMember作为类的模板,因为我的Update成员函数要由对象调用时的参数来决定,而不能由类生成对象时决定。
我是不是不能把Update作为类的成员?

以下是源代码,望高手指点
所有的注释都是把TMember不作为类的模板而加上的,如果去掉,可以编译通过,但不能实现我的意愿。

//.h file

#if !defined(__MANIPULATE_H__)
#define __MANIPULATE_H__
#pragma once

#include <set>
using namespace std;

#include "Observer.h"
#include "Notify.h"
using namespace System::Baby;

namespace System
{
namespace Baby
{
template<typename T/*, typename TMember*/>
class Manipulate
{
public:
Manipulate(void);
~Manipulate(void);
void Insert(const set<T> parent, const T child);
void Remove(set<T> parent, T child);

template<typename TMember>
void Update(TMember T::* pMember, const TMember newMemberValue);
};
}
}

#endif

//.cpp file
#include "Manipulate.h"
using namespace System::Baby;

template<typename T/*, typename TMember*/>
Manipulate<T/*, TMember*/>::Manipulate(void)
{
}

template<typename T/*, typename TMember*/>
Manipulate<T/*, TMember*/>::~Manipulate(void)
{
}

template<typename T/*, typename TMember*/>
void Manipulate<T/*, TMember*/>::Insert(const set<T> parent, const T child)
{
parent.insert(child);
}

template<typename T/*, typename TMember*/>
void Manipulate<T/*, TMember*/>::Remove(set<T> parent, T child)
{
parent.remove(child);
}

//不清楚这里怎么写:(,如果这样写的话,TMember不会知道是一种类型呀
template<typename T/*, typename TMember*/>
void Manipulate<T/*, TMember*/>::Update(TMember T::*pMember, const TMember newMemberValue)
{
*pMember=newMemberValue;
}
...全文
48 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fixopen 2002-01-23
  • 打赏
  • 举报
回复
那我在cpp文件里该怎么写呢?
是不是只能写在类定义里,变成内联的?
我看了VC的STL实现,全是内联的
lovelinzi 2002-01-23
  • 打赏
  • 举报
回复
支持。
qqchen79 2002-01-23
  • 打赏
  • 举报
回复
VC6.0以前的版本不支持!之后支持。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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