2010-06-05 5 views
0
class A {}; 

class B {}; 

class C {}; 

class D {}; 

//A+B , A+C, B+C , A+D, D+C namely all of these combinations will be possible just one functions 
+4

당신은 당신이 원하는 것을 명확히 할 필요가있다. 실제 사례, 실제 문제 등을 설명하십시오. 저는 영어가 모국어가 아닌 것으로 가정하고 있으므로 가능한 한 자세히 설명해보십시오. – GManNickG

답변

2
template <typename T, typename U> 
void foo(const T& pX, const U& pY) 
{ 
    // do stuff 
} 

이 그것을 TU의 각기 다른 조합에 대한 새로운 기능을 만들면서 당신은, 그 자체, 원하는 아니지만, 하나의 함수 템플릿입니다.


이 동일하게되는 것을 TU을 금지 :

template <bool> struct static_assert {}; 
template <> struct<true> static_assert {}; 

#define STATIC_ASSERT(pValue) static_assert<(pValue)>() 

// ... 

template <typename T, typename U> 
struct is_different 
{ 
    static const bool value = true; 
}; 

template <typename T> 
struct is_different<T, T> 
{ 
    static const bool value = false; 
}; 

// ... 

template <typename T, typename U> 
void foo(const T& pX, const U& pY) 
{ 
    STATIC_ASSERT(is_different<T, U>::value); 

    // do stuff 
} 
+0

OP가 모든 가능한 조합에 대해 하나의 함수 만 쓰고 싶다면 이것이 유일한 방법입니다. 그러나 다형성을 사용하여 클래스 당 하나의 추가 함수를 작성할 수도 있습니다. – Puppy

+0

여기에는 질문에 포함되지 않은 A + A, B + B, B + A 등이 포함됩니다. –

+0

@Kirill : 사실, 멈추기가 너무 어렵지 않습니다. – GManNickG

관련 문제