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

fixopen 2002-01-23 03:01:44
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;
}
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tief 2002-01-23
  • 打赏
  • 举报
回复
我写过一些模板,原来在VC中便宜也出现过问题,最后发现在VC中编译必须把声明和实现放在一个h文件中而不能分为h和cpp。
LLnju 2002-01-23
  • 打赏
  • 举报
回复
可以这样写,但好像 VC 里不能将 定义和实现写在.h,.cpp两个文件中。你就都写在 .h 中算了。你看 STL , ATL 都是这么干的
fixopen 2002-01-23
  • 打赏
  • 举报
回复
我是指:
class c
{
public:
template<typename T>
T fn(Ti pT);
};
这种方式。
typename==class
fixopen 2002-01-23
  • 打赏
  • 举报
回复
没有人回答么?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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