社区
工具平台和程序库
帖子详情
How to ensure two template member functions specificated with same type?
noho
2002-12-30 03:53:04
class A
{
template<typename T> foo(T *);
template<typename T> bar(T *);
};
except for using RTTI technology.
Any suggestion are appreciated.
...全文
254
8
打赏
收藏
How to ensure two template member functions specificated with same type?
class A { template foo(T *); template bar(T *); }; except for using RTTI technology. Any suggestion are appreciated.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
noho
2003-01-06
打赏
举报
回复
//nod
有人从理论上证明了compile-time check是不可能的。
结贴。
rushman
2003-01-04
打赏
举报
回复
--如果foo不是foo,而是class A的构造函数呢?
如果foo是class A的构造函数,那就需要将这个类进行封装(使用这个类的实例)。既然这样,为什么不把它设计成模板?如果需要,可以先设计一个虚基类,再派生出来这个模板。这样一般来说,可以实现与你的类相同的功能。
反过来,也说明你在类的设计上先天就有问题。有时候,不一定非要在墙上打个洞再钻过去,退一步,也许就会发现另有通途。^_^
noho
2003-01-04
打赏
举报
回复
如果foo不是foo,而是class A的构造函数呢?
rushman
2003-01-01
打赏
举报
回复
Happy new year..........
rushman
2003-01-01
打赏
举报
回复
既然能在编译期进行检查,就说明这两个函数的调用是由程序员安排的,所以我认为关键应该在于调用时的处理。
为了不至于在调用时产生混乱,应该将对这两个函数的调用部分封装起来。
首先,将这两个函数保护(protected)起来,然后,将调用这两个函数的代码放在一起,外部只能通过这些接口来访问。
//----------------------------------------------
另写一个模板函数当作跳板来调用这两个函数。
templact<class T>
void function(T * ){
foo(...);
bar(...);
}
//----------------------------------------------
把两个函数变成一个函数。从软件工程的角度,这是个馊主意。从面向对象的角度,这叫基于消息???^_^
template<class T>
void function(T*p,int msg)
{
switch(msg){
case FOO:....
case BAR:....
......
}
}
//---------------------------------------------
将这两个函数调用的接口设计成类,灵活性、封装和实用性更好。
template<class T>
class X{
public:
//使其界面象一个函数
void operator()(int msg,T*)
{
switch(msg){
case FOO:....
case BAR:....
......
}
}
};
noho
2002-12-31
打赏
举报
回复
我找到了一个方法,可惜是在运行时检查,不知道哪位能提供编译时检查的版本。
template<typename T>
struct TypeInfo
{
static void constraints(void){};
};
class A
{
template<typename T> foo(T *)
{
constraints = &TypeInfo<T>::constraints;
}
template<typename T> bar(T *)
{
assert(constraints == &TypeInfo<T>::constraints);
}
void (*constraints)();
};
foo一定先于bar调用。
qing_li73
2002-12-31
打赏
举报
回复
concern
zfluo
2002-12-31
打赏
举报
回复
template <class T>
class A
{
void foo(T*);
void bar(T*);
};
前端面试题
本文系统梳理前端高频面试考点,涵盖JavaScript原型链、
type
of与instanceof区别、数组操作与去重、深浅拷贝、Event Loop机制;
Type
Script中
type
与interface对比、联合/交叉类型、泛型;React核心概念如key、useEffect、Error Boundaries、Portals、Fiber及性能优化;CSS盒模型、选择器优先级、Flex/Grid布局;以及Webpack/Vite、微前端、XSS/CSRF防护等工程化与安全议题。
CANN/GE分组卷积拆分Pass示例
本文介绍了基于CANN GE图编译器的自定义Pass开发方法,用于将分组卷积(Group
ed
Convolution)拆分为多个标准卷积操作。内容涵盖Pass的类定义、匹配模板设计、子图替换与形状推断实现,并支持ATC离线编译和在线推理两种验证方式。开发依赖GCC 7.3+、Python 3.9+及PyTorch 2.1+,需通过动态库注册并在InferShape阶段执行。
CANN/HCCL:BIRS批量不变R
ed
uceS
cat
ter算法
BIRS是一种面向昇腾A3服务器2D拓扑(SIO+HCCS混合互连)的批量不变R
ed
uceS
cat
ter算法,保障位级确定性的同时提升带宽利用率。相比现有RHD算法,大消息场景下算子执行时间最高提升25%。其核心设计包括分阶段协同利用SIO与HCCS链路、严格固定的归约加法顺序、3线程并行模型及兼容现有HCCL接口的零API变更集成方案。
CANN/amct贡献指南
本文档详细说明了向CANN AMCT(Ascend Model Compression Toolkit)开源项目贡献的完整流程,涵盖Bug修复、新功能开发(需先提交RFC达成共识)、PR提交规范、文档修正及协助解决他人问题等场景。强调代码风格检查、CI验证、LICENSE合规性、实验性代码存放路径(experimental目录)等关键实践要求,并指出AMCT是面向昇腾AI处理器的模型压缩工具仓。
CANN/hccl: 带宽高效的不变R
ed
uceS
cat
ter (BIRS) 算法
本文提出BIRS(Batchsize-Invariant R
ed
uceS
cat
ter)算法,专为昇腾A3服务器2D拓扑(SIO+HCCS混合互连)设计,在保证批大小无关性与位级确定性的前提下,通过协同调度SIO与HCCS链路,相较现有RHD算法在大消息场景下提升最高25%算子执行性能。算法支持FP16/FP32/BF16数据类型及SUM/MAX/MIN/PROD操作,兼容HCCL现有API,采用独立编译路径与环境变量控制,确保向后兼容。
工具平台和程序库
24,851
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章