2010-06-05 3 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 
} 

Это не то, что вы хотите, сами по себе, как это делает новую функцию для каждой отдельной комбинации T и U, но это один шаблон функции.


Это запрещает T и U быть тем же самым:

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

@ Кирилл: Правда, не слишком сложно остановить. – GManNickG

Смежные вопросы