社区
工具平台和程序库
帖子详情
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.
...全文
247
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*);
};
CANN/GE分组卷积拆分Pass示例
本文介绍了基于CANN GE图编译器的自定义Pass开发方法,用于将分组卷积(Group
ed
Convolution)拆分为多个标准卷积操作。内容涵盖Pass的类定义、匹配模板设计、子图替换与形状推断实现,并支持ATC离线编译和在线推理两种验证方式。开发依赖GCC 7.3+、Python 3.9+及PyTorch 2.1+,需通过动态库注册并在InferShape阶段执行。
CANN/amct贡献指南
本文档详细说明了向CANN AMCT(Ascend Model Compression Toolkit)开源项目贡献的完整流程,涵盖Bug修复、新功能开发(需先提交RFC达成共识)、PR提交规范、文档修正及协助解决他人问题等场景。强调代码风格检查、CI验证、LICENSE合规性、实验性代码存放路径(experimental目录)等关键实践要求,并指出AMCT是面向昇腾AI处理器的模型压缩工具仓。
Code to Story:开发者叙事架构工具原理与实操
在技术传播中,‘代码能力’与‘表达能力’之间存在结构性断层——工程师常精通实现逻辑,却难以将技术价值转化为他人可感知的叙事。Code to Story 并非通用AI写作工具,而是一套基于认知科学与工程实践的叙事操作系统:它通过三段式结构(人类问题→干预选择→可测转变)重构技术表达逻辑,结合 AST 语义解析、意图推理层与本地化 LLM 约束生成,确保输出真实、可验证、场景适配。其核心价值在于将文档写作内化为开发流程一环,支撑技术面试、GitHub 项目包装、内部 RFC 撰写等高频工程场景,让代码自带故事力
CANN/ge AddZeroPass C++示例
本文介绍基于昇腾CANN GE(Graph Engine)开发的AddZeroPass C++示例,用于在计算图中自动识别并移除add-zero冗余节点。内容涵盖自定义融合Pass的实现流程(继承基类、重写匹配/过滤/替换函数)、注册时机(BeforeInferShape)、编译部署(CMake配置、SO动态库安装)及验证方式(ATC离线编译与在线推理双路径)。依赖GCC 7.3+、Python 3.9+及PyTorch 2.1+,支持ONNX/PB模型格式。
CANN/asc-devkit Squeeze向量压缩示例
本博客介绍基于CANN Ascend DevKit的Squeeze向量压缩算子实现,使用Reg编程接口调用Squeeze、StoreUnAlign及StoreUnAlignPost等API,在昇腾AI处理器上完成按步长4选取有效元素、写入连续输出向量并利用AR寄存器记录有效元数的操作。强调AR寄存器清零、STORE_REG模式约束及多迭代数据搬运流程,适用于自定义算子开发。
工具平台和程序库
24,851
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章