首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++:函数模板的有关问题

2013-11-25 
C++:函数模板的问题本人C#转过来的,对C++泛型这块不是很了解。需求是这样的:本来写了若干函数生成不同类型

C++:函数模板的问题
本人C#转过来的,对C++泛型这块不是很了解。
需求是这样的:本来写了若干函数生成不同类型的对象,通过取数据然后 obj1.value = 数据, obj2.width= 数据,...... 其中obj1,obj2是不同类型, 他们的成员也不一样,大约有7-8种类型,写7-8个函数实现,可以是可以,但是有点傻。所以想用函数模板来实现:
template<class T> 
T generateObj(T &obj, data, int TypeId)
{
    ...
    return obj;
}
可以通过TypeId来控制哪种类型怎么初始化, 我想问的是,怎么给每个类型的obj对象的成员变量赋值? C++?函数模板 泛型
[解决办法]
感觉你要通过元数据(data)生成不同的结构体T。
T是不同类型,其成员也不一样,所以生成方法也不一样,写多个函数是避免不了的,但可以使用统一的接口形式,便于上层调用.
class T1
{
  int a;
  string b;
  bool FromData(const Data& cData);  //统一接口
}

class T2
{
  int a;
  string b;
  string c;
  bool FromData(const Data& data);  //统一接口

}

template<class T> 
T generateObj(T &obj, const Data& data)
{
    obj.FromData(data);
    return obj;
}

[解决办法]

引用:
本人C#转过来的,对C++泛型这块不是很了解。
需求是这样的:本来写了若干函数生成不同类型的对象,通过取数据然后 obj1.value = 数据, obj2.width= 数据,...... 其中obj1,obj2是不同类型, 他们的成员也不一样,大约有7-8种类型,写7-8个函数实现,可以是可以,但是有点傻。所以想用函数模板来实现:
template<class T> 
T generateObj(T &obj, data, int TypeId)
{
    ...
    return obj;
}
可以通过TypeId来控制哪种类型怎么初始化, 我想问的是,怎么给每个类型的obj对象的成员变量赋值?


分别为不同的obj设计不同的generateObj全特化就行了。例如:


template< typename T >
T generateObj( T& obj );

template<>
obj1 generateObj< obj1 >( obj1& obj )
{
    obj.a = ...;
    obj.c = ...;
    ......
    return obj;
}

template<>
obj2 generateObj< obj2 >( obj2& obj )
{
    obj.b = ...;
    obj.d = ...;
    ......
    return obj;
}
...........


如果传入的实参不会产生重载二义的话,也可以用重载实现,但推荐函数模板实现。
[解决办法]
用模板实现,前提是所有的模板包含的类型有相同的操作符,比如都有==操作,这样就是可以写成统一的接口!

热点排行