我已經創建了一個類型列表。然後我使用傳遞類型列表的模板創建一個類。當我用某些未指定的類型調用該類的打印函數時,它們會被鑄造。我怎樣才能在編譯時強制確切的類型?所以如果我使用一個不公開的類型,我會得到一個編譯器錯誤。 謝謝。編譯時間類型檢查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'函數並不是很有用,因爲它沒有實現任何遞歸。 –