我已经创建了一个类型列表。然后我使用传递类型列表的模板创建一个类。当我用某些未指定的类型调用该类的打印函数时,它们会被铸造。我怎样才能在编译时强制确切的类型?所以如果我使用一个不公开的类型,我会得到一个编译器错误。 谢谢。编译时间类型检查C++
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的三种实例列表中的每个类型或者它创建一个实例,我要为每一个类型的打印功能? 我觉得我脑子里几乎有所有的东西,但是不能把它们放在一起。任何帮助你可以提供将感激地收到。谢谢。
你的'print'函数并不是很有用,因为它没有实现任何递归。 –