2016-03-03 35 views
4

是否有可能一個定義泛型類沒有在C++中使用模板。我已經爲生成C++代碼的語言編寫了一個編譯器,但是我沒有在我的語言中包含模板構造。在C++中的模板類的替代品?

我想知道這是什麼可能泛型類在我的語言和我的語言。

的試圖通過以下方式做到這一點:

爲了實現一個新的數據結構我聲明其類型爲「數據」,一個空的類,並施加於用戶的限制,以(例如堆疊)。首先定義一個擴展Data的新類(例如myData),並僅使用myData對象和數據結構。

Stack.h定義:

#ifndef STACK_H 
#define STACK_H 

#include <stack> 

class Data{}; 

class Stack { 
private: 
    std::stack<Data*> st; 
public: 
    bool empty() {return st.empty();} 
    int size() {return st.size();} 
    void pop() {st.pop();} 
    Data* top() {return st.top();} 
    void push(Data &e) {st.push(&e); } 
}; 

#endif 
從用戶「的myData」的

預期的定義:

class myData: public Data{ 
public: 
    int a; 
    myData (int A): a(A){} 
    myData(){} 
    myData (const Data& x) { 
    } 

    myData& operator= (const Data& x) { 
    } 
    int getData(){return a;} 
}; 

試圖運行下面的main():

int main(){ 
    stack<Data*> st; 
    myData A(10); 
    st.push(&A); 
    printf("%u\n", &A); 
    printf("Size: %d\n", (int)st.size()); 

    myData B; 
    Data *C = (st.top()); 
    B = *((myData*)C); 
    printf("%u\n", C); 
    printf("%d\n", B.getData()); 

    return 0; 
} 

我想要知道有沒有更好的應用來嘗試做更有組織和適當的相同工作。你可以假設我的語言是(C++ - {template classes})。

+2

你可以看看用其他語言完成了什麼:https://en.wikipedia.org/wiki/Generic_programming – Garf365

+2

是的,還有其他機制可以提供通用性,並且你自己提供了一個。然而,這個問題沒有什麼價值,因爲它本質上是「C++可以做些什麼來代替這個問題」,這是不可能達成任何有建設性的答案的。因此VTC。 –

回答

-1

好像有C中沒有的模板替代++這就是爲什麼他們已被列入作爲語言的基本特徵。

+0

確實有替代品,如Java的(意譯)「每一個類從'Object'和泛型在運行時轉換爲實際的類型繼承」。類似的系統可以被合併到C++類的設計中,但它不會像模板那樣高效。 –