템플릿을 이용해서 임의의 STRUCT (구조체) 를 저장하는 프로그램을 짤려고 합니다..

------------------------------------------------------------------------------------------
struct dataset{
        int key;
        T (* data);
        dataset *prev;
        dataset *next;
};
.....................................

struct app{
        int a;
        int b;
        int c;
};
void main()
{
        app p;
        p.a = 1;
        p.b = 2;
        p.c = 3;

        Data<app> aa;
        aa.PUSH_BACK((void *)p,1);

}

............................................

void Data<class T>::PUSH_BACK(void *pdata,int key){
        dataset<T> *temp;
        temp = new dataset<T>;
        temp->data=(T *)pdata;
        temp->key = key;
        temp->next = tail->prev->next;
        temp->prev = tail->prev;
        tail->prev->next = temp;
        tail->prev = temp;
}

------------------------------------------------------------------------------------------
위 소스에서 인자 void *pdata 이 부분에 어느것을 넣어야 임의의 구조체를 인자로 넘길수 있나요?
방법이 틀렸다면, 어떻게 넘길수 있는지 방법좀 알려주세요. 또 넘긴 구조체를 temp->data 에 저장하는 방법도 알려주세요.. 위에 것은 틀린거 같아서요...