2011-05-06 28 views
3

HI,C++通用对象

我有以下代码:

class Libr 
{ 

public: 
Libr(); 
std::string book; 

class Street 
{ 
public: 
Street(); 

}*street 
}*libr; 

我怎样才能在下面的方法使用一个通用对象:

void find(std::string, ??generic object) 
{//code}; 

可有人请给我一个示例与通用对象适用于我写的两个类?THX!

+1

您在C++语言中提出了很多关于* genericity *的问题。我感觉你正在以错误的方式接近问题,C++不是一种动态类型的语言,并且在很多情况下*通用性*会损害可维护性。你应该从一些基础知识开始,并从那里开始构建。 – 2011-05-06 13:11:01

+0

我同意。然而,它很好地帮助我测试我的通用技能。 ;-)无论如何,我会非常友好地建议linuxx看看一个教程,例如:http://www.cplusplus.com/doc/tutorial/templates/ – AudioDroid 2011-05-06 13:46:15

+0

thx!我会查看它 – linuxx 2011-05-09 13:07:54

回答

3

你可以把它的功能模板:

template<class T> 
void find(std::string s, T & object) 
{ 
    //code 
}; 

你可以使用任何类型的参数调用它。阅读this以获得更多模板。

+0

thx为答案。 T班应该包含什么?以及如何从void main()调用find方法。我不需要一个对象到Libr和Street类(在void main())中吗? – linuxx 2011-05-06 13:03:08

+0

可以请你填写我的代码... witj你的例子,以及我应该如何从void int()中调用这些代码,祝你周末愉快。 Really appreciate.thx :) – linuxx 2011-05-06 13:04:02

+0

@linuxx:'T'是一个类型参数。你可以用任何类型来代替它。如果你用'int'的对象调用'find'作为'object',它就会变成'void find(std :: string,int&)'。 – 2011-05-06 13:10:26

1

或者你也可以通过无类型指针:

void find(std::string, void* object) 
{ 
    //code 
} 

这取决于你要去发现里面做什么()。

+0

如果您打算对** object **进行几乎任何操作,比较实例,则此方法要求您知道指向对象的类型,并将void指针转换为该类型的指针。因此** find **必须知道对象的动态类型。虽然有些人为的例子可能会做指针比较而不是比较对象,但这种方法的适用性有限。 – 2013-10-29 14:16:51