2011-05-06 6 views
3

HI,C++ 일반 객체

나는이 다음 코드 :

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

누군가가 나에게 줄시겠습니까 : 나는 다음과 같은 방법으로 일반 객체를 사용할 수있는 방법

class Libr 
{ 

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

class Street 
{ 
public: 
Street(); 

}*street 
}*libr; 

내가 작성한 클래스와 THX 모두에 적용되는 일반 객체를 사용한 예!

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

당신은 어떤 유형의 매개 변수를 사용하여이 작업을 호출 할 수 있습니다

+1

* C++ 언어의 * genericity *에 대한 질문이 많이 있습니다. 나는 당신이 잘못된 방식으로 문제에 접근하고 있다는 느낌을 받고있다. C++은 동적 타입 언어가 아니며, 많은 경우에 보편성은 유지 보수성을 해칠 것이다. 기본적인 튜토리얼을 통해 시작하고 거기에서 빌드해야합니다. –

+0

동의합니다. 그러나 제 일반적인 기술을 테스트하는 것이 좋았습니다. ;-) 어쨌든, 나는 linuxx에게 다음과 같은 튜토리얼을 보도록 제안하는 것이 매우 친절 할 것이다 : http://www.cplusplus.com/doc/tutorial/templates/ – AudioDroid

+0

thx! 나는 그것을 살펴볼 것이다. 대답은 – linuxx

답변

3

당신은 그것을 함수 템플릿을 만들 수 있습니다. 템플릿을 더 얻으려면 this을 읽어보십시오.

+0

입니다. T 반에는 무엇이 들어 있어야합니까? 어떻게 void main()에서 find 메소드를 호출해야합니까? Librand Street 클래스 (void main())의 객체가 필요하지 않습니까? – linuxx

+0

내 코드를 완성 해 주시겠습니까 ... witj 예를 들어 void int()에서 호출해야합니다. 좋은 주말을 기원합니다. 정말 고맙습니다 .thx : – linuxx

+0

@linuxx :'T'는 타입 매개 변수입니다. 어떤 유형 으로든 대체 할 수 있습니다. 'int'의 객체를'object'로하여'find'를 호출하면, 그것은'void find (std :: string, int &)'가 될 것입니다. –

1

아니면이 지정되지 않은 포인터를 전달할 수 있습니다

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

그것은 당신이 발견 안에 어떻게 할 건데에 따라 달라집니다().

+0

** object **에 대해 거의 모든 작업을 수행하려는 경우 (예 : 비교) 포인터가 지정된 객체의 유형을 알아야하며 void 포인터를 해당 유형의 포인터로 캐스트해야합니다. 따라서 ** find **는 어쨌든 객체의 동적 유형을 알아야합니다. 객체를 비교하는 대신 포인터 비교를 수행 할 수있는 인위적인 예제가 있지만이 접근법은 적용 범위가 제한적입니다. –