2015-09-12 26 views
-3

У меня есть эти СтруктурыНесколько родовых типов в классе

typedef struct { 
int a; 
} a; 
typedef struct { 
char a; 
} aa; 
typedef struct { 
short b; 
} b; 
typedef struct { 
char b; 
} bb; 

class Test { 
private: 
a i; //or b i; 
aa c; // or bb c; 
} 

Я хочу создать класс, который будет иметь один и тот же код, и использовать a,aa структуры или b,bb структур в зависимости от объявления класса, я не» t хотите, чтобы каждая функция в отдельном элементе была разделена отдельно, и я хочу, чтобы класс знал, какой набор структур находится до вызова конструктора или в конструкторе. Как это сделать? Благодарю.

+1

Вы также не хотите, чтобы весь класс был 'template '? – LogicStuff

+0

Включает ли класс класс в шаблон шаблона? – Angew

+0

Да, это прекрасный способ превратить класс в шаблон – Fleev

ответ

4

Я не уверен, что я вполне понимаю вопрос, но вы ищете что-то подобное, случайно?

#include <type_traits> 

template <bool UseA> 
class Test { 
private: 
typename std::conditional<UseA, a, b>::type i; 
typename std::conditional<UseA, aa, bb>::type c; 
}; 

Test<true> test_using_a; 
Test<false> test_using_b; 
0

Общее решение для наличия двух членов различных типов, конечно:

template<class X, class Y> 
class Test { 
private: 
    X i; 
    Y c; 
}; 

Затем вы можете создать экземпляр любые комбинации, которые вы хотите, как Test<a,aa>, Test<b,bb>, или даже сойти с ума от Test<b,aa>.

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