c template(【重金悬赏】如何在centos上安装ctemplate 2.2.1)

本文目录
- 【重金悬赏】如何在centos上安装ctemplate 2.2.1
- CDocument* CMutiDocTemplate::OpenDocumentFile( LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE)
- C语言的void*与C++的template相比有何优劣
- java可以实现c语言的模板功能吗
- C中的模板怎样使用 最好给个例子~
【重金悬赏】如何在centos上安装ctemplate 2.2.1
Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
Requires: libc.so.6(GLIBC_2.14)(64bit)
已经给你提示了,缺少依赖的库,看它提示缺什么就安装什么吧
可以用 yum list glibc*
yum list libc* yum list libstdc* 查看可安装的版本
用 yum install 命令安装即可
你这个可以用 yum install libstdc++.x86_64
yum install glibc.x86_64
然后再安装 ctemplate 试试
CDocument* CMutiDocTemplate::OpenDocumentFile( LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE)
在这里是Falsh,是给ole接口预留的。
CCmdTarget* COleTemplateServer::OnCreateObject()
{
ASSERT_VALID(this);
ASSERT_VALID(m_pDocTemplate);
// save application user control status
BOOL bUserCtrl = AfxOleGetUserCtrl();
// create invisible doc/view/frame set
CDocument* pDoc = m_pDocTemplate-》OpenDocumentFile(NULL, FALSE);
// restore application’s user control status
AfxOleSetUserCtrl(bUserCtrl);
if (pDoc != NULL)
{
ASSERT_VALID(pDoc);
ASSERT_KINDOF(CDocument, pDoc);
// all new documents created by OLE start out modified
pDoc-》SetModifiedFlag();
}
return pDoc;
}
C语言的void*与C++的template相比有何优劣
看用法咯
从概念上讲, void* 通常实现的是一种 type erasure ——抹去对象的类型信息,从而让不同类型的对象可以适应同一个接口,坏处是这样基本就抹去了所有编译期信息,如果想做类型检查或者其他检查,就只能靠额外传入的信息,这种情况下,对象的合规与否只能靠自觉。而 template 实现的是一种 polymorphic ——根据对象类型的不同生成不同的接口,这样可以保留类型信息,甚至利用类型信息得到更优化的实现,能保留下的有效信息越多,能做到的事就越多。
template 可以进行 type erasure ,但是如果已经用了 type erasure 的话,基本就不可能再用 template 了,这个意义上 C 语言的 void* 是严格弱于 C++ 的
java可以实现c语言的模板功能吗
1、java是纯面向对象的语言(main都是写到类里的),所以没有原生的模板功能。
2、使用“模板模式”可以实现类似的效果,这也是java里最常用的模式之一。
以下是一篇教程:
模板方法模式的结构
模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。
模板方法所代表的行为称为顶级行为,其逻辑称为顶级逻辑。模板方法模式的静态结构图如下所示:
这里涉及到两个角色:
抽象模板(Abstract Template)角色有如下责任:
■ 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。
■ 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
具体模板(Concrete Template)角色又如下责任:
■ 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
■ 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
源代码
抽象模板角色类,abstractMethod()、hookMethod()等基本方法是顶级逻辑的组成步骤,这个顶级逻辑由templateMethod()方法代表。
public abstract class AbstractTemplate {
/**
* 模板方法
*/
public void templateMethod(){
//调用基本方法
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* 基本方法的声明(由子类实现)
*/
protected abstract void abstractMethod();
/**
* 基本方法(空方法)
*/
protected void hookMethod(){}
/**
* 基本方法(已经实现)
*/
private final void concreteMethod(){
//业务相关的代码
}
}
具体模板角色类,实现了父类所声明的基本方法,abstractMethod()方法所代表的就是强制子类实现的剩余逻辑,而hookMethod()方法是可选择实现的逻辑,不是必须实现的。
public class ConcreteTemplate extends AbstractTemplate{
//基本方法的实现
@Override
public void abstractMethod() {
//业务相关的代码
}
//重写父类的方法
@Override
public void hookMethod() {
//业务相关的代码
}
}
模板模式的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。
每当定义一个新的子类时,不要按照控制流程的思路去想,而应当按照“责任”的思路去想。换言之,应当考虑哪些操作是必须置换掉的,哪些操作是可以置换掉的,以及哪些操作是不可以置换掉的。使用模板模式可以使这些责任变得清晰。
C中的模板怎样使用 最好给个例子~
看看这个吧
***隐藏网址***
其他的见
C语言中实现模板函数的方法
在C语言中实现模板函数的方法:
各种用C语言实现的模板可能在使用形式上有所不同。
现以一个求和函数Sum为例,用C++Template可写如下:
template《classT,classR》 RSum(constT*array,intn)
{
Rsum=0;
for(inti=0;i《n;++i)
sum+=i;
returnsum;
}
如果不是内置类型,该模板隐式地需要有RR::operator+=(T)运算符可用。
1. 使用函数指针作为Functor替换者
TypedefstructtagAddClass
{
Void(*add)(char*r1,constchar*r2);
IntelemSize;
Char sum;
}AddClass;
voidSum(AddClass*self,constchar*array,intn)
{
for(inti=0;i《n;++i)
self-》add(self-》sum,array+i*self-》elemSize);
}
使用时:
…..
VoidAddInt(char*r1,constchar*r2)
{
*(long*)r1+=*(int*)r2;
}
AddClassaddClass={AddInt,2,0};
Intarray;
Read(array);
Sum(&addClass,array,100);
…..
2. 用宏作为Functor的替换者
#define GenSumFun(SumFunName,Add,RetType,ElemType) \
RetTypeSumFunName(constElemType*array,intn) \
{ \
RetTypesum=0; \
for(inti=0;i《n;++i) \
Add(sum,i); \
returnsum; \
}
使用时:
#defineAddInt(x,y) ((x)+=(y))
GenSumFun(SumInt,AddInt,long,int)
…..
Intarray;
Read(array);
Longsum=SumInt(array,100);
…..
3. 所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为impsum.c
/*impsum.c*/
RetTypeFunName(constElemType*array,intn)
{
RetTypesum=0;
for(inti=0;i《n;++i)
Add(sum,i);
returnsum;
}
使用时:
#undef RetType
#undef FunName
#undef ElemType
#undef Add
#defineAddInt(x,y) ((x)+=(y))
#defineRetTypelong
#defineFunNameSumInt
#defineElemTypeint
#defineAdd AddInt
#includeimpsum.c
…..
Intarray;
Read(array);
Longsum=SumInt(array,100);
…..
4. 总结:
第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。
第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。
第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。
一般情况下,没有必要做如此劳心的工作,一切交给编译器去做就行了。但是本人在开发一个文件系统时,由于是基于一种少见的平台,没有可用的C++编译器,有几个函数,除了其中的类型不同(uint16和uint32),和几个可参数化的宏不同,其它地方完全相同,而函数本身很复杂(两百多行代码)。Copy出几个完全类似的函数副本,维护起来特别烦人。非常需要如此的编程模式,故此,分享出来,大家共同探讨。

更多文章:
sql语句优化面试(面试问到 数据库性能优化 怎么回答 我是Oracle数据库)
2025年7月30日 02:15
图片转换代码软件(求一款图片转网页代码的工具,就是可以把图片转换成网页广告的那种,)
2025年6月30日 23:30
desense(手机desense测试,中文是什么意思怎么测试)
2025年11月12日 03:00
如何使用ubuntu系统(win10安装ubuntu双系统怎么装)
2025年9月4日 20:00
sql数据库多少钱(access sql 等的数据库,开发工具多少钱运行平台多少钱)
2026年1月21日 20:15
php环境搭建的原理(什么是PHPWEB环境的搭建及其作用)
2026年8月23日 16:15
c语言一维数组有几个数(c语言的一维数组中至少要有几个元素)
2025年11月27日 13:30
1111101100101110转为16进制?将23456表为16进制数
2025年12月19日 18:30
指针变量为什么占4个地址(C语言中,为什么指针变量无论指向那个类型的变量,其所占的字节都为4个字节详解)
2025年7月27日 19:00
html5模板 支付成功(html5怎么实现支付宝实时转账)
2025年7月5日 15:45
js jquery面试(jquery中怎么调用js方法调用)
2025年8月8日 03:45











