Я создал список типов. Затем я создаю класс, используя шаблон, передавая список типов. Когда я вызываю функцию печати класса с некоторыми не указанными типами, они преобразуются. Как я могу обеспечить точный тип во время компиляции? Поэтому, если я использую незарегистрированный тип, я получаю ошибку компилятора.
Благодарю.
template <class T, class U>
struct Typelist
{
typedef T Head;
typedef U Tail;
};
class NullType
{
};
typedef Typelist<int,Typelist<float,Typelist<char*,NullType> > > UsableTypes;
template<class T>
class MyClass
{
public:
void print(T::Head _Value) { std::cout << _Value; }
void print(T::Tail::Head _Value) { std::cout << _Value; }
void print(T::Tail::Tail::Head _Value) { std::cout << _Value; }
private:
};
MyClass<UsableTypes> testclass;
void TestMyClass()
{
int int_val = 100000;
float flt_val = 0.1f;
char* char_val = "Hi";
short short_val = 10;
std::string str_val = "Hello";
testclass.print( int_val ); // OK 8-)
std::cout << endl;
testclass.print( flt_val ); // OK 8-)
std::cout << endl;
testclass.print( char_val ); // OK 8-)
std::cout << endl;
testclass.print( short_val); // this compiles OK and works ??? 8-(
std::cout << endl;
testclass.print( str_val ); // compile error 8-)
std::cout << endl;
}
@ Kerrek SB: Привет, я подумал, что это поможет мне с моим следующим шагом - созданием функции печати в зависимости от содержимого t_list, типов и количества типов. Но я изо всех сил пытаюсь разделить обработку времени компиляции и обработку времени выполнения. Я пытаюсь создать функцию печати для каждого типа в списке. Таким образом, если список имеет два типа, будут созданы две функции печати, а если есть пять типов, то будут созданы пять функций печати, по одной для каждого типа.
Когда я делаю это:
typedef Typelist<int,Typelist<float,Typelist<char*,NullType> > > UsableTypes;
MyClass<UsableTypes> newclass
Создает ли это три экземпляра MyClass по одному для каждого типа в списке, или это создает один экземпляр, и мне нужно создать функцию печати для каждого типа?
Я чувствую, что у меня в голове почти все блоки, но просто не могу соединить их вместе. Любая помощь, которую вы можете предложить, будет принята с благодарностью. Спасибо.