c++ template linked list which can hold any types
up vote
-1
down vote
favorite
How to define a list which can hold different types of objects in c++, just like python list? I tried the following code
#include <iostream>
template< typename t >
struct Node
t val;
Node *next;
;
int main()
Node<int> a;
a.val = 1;
Node<char> b;
b.val = 'b';
a.next = &b;
b.next = NULL;
But compiler gives the following error:
main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in
assignment
a.next = &b;
^
templates types
add a comment |
up vote
-1
down vote
favorite
How to define a list which can hold different types of objects in c++, just like python list? I tried the following code
#include <iostream>
template< typename t >
struct Node
t val;
Node *next;
;
int main()
Node<int> a;
a.val = 1;
Node<char> b;
b.val = 'b';
a.next = &b;
b.next = NULL;
But compiler gives the following error:
main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in
assignment
a.next = &b;
^
templates types
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07
add a comment |
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
How to define a list which can hold different types of objects in c++, just like python list? I tried the following code
#include <iostream>
template< typename t >
struct Node
t val;
Node *next;
;
int main()
Node<int> a;
a.val = 1;
Node<char> b;
b.val = 'b';
a.next = &b;
b.next = NULL;
But compiler gives the following error:
main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in
assignment
a.next = &b;
^
templates types
How to define a list which can hold different types of objects in c++, just like python list? I tried the following code
#include <iostream>
template< typename t >
struct Node
t val;
Node *next;
;
int main()
Node<int> a;
a.val = 1;
Node<char> b;
b.val = 'b';
a.next = &b;
b.next = NULL;
But compiler gives the following error:
main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in
assignment
a.next = &b;
^
templates types
templates types
asked Nov 9 at 1:55
Kuisong Zheng
1
1
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07
add a comment |
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
There is a couple problems with this code, first of which is the next member of Node does not have a template type defined, usually in this case if you want to make a linked list of one generic type you would do something like Node<t>* next
. Second is the fact that you are assigning what seems to be an Node* to a Node*.
If what you are trying to do is create a linked list of different types you cannot do it this way. Simply put, the reason is because you have to pass in a type for the t
argument and because of this each node must have a defined type. The purpose of template classes is not to allow user to allocate any generic type willy nilly but rather to simplify repeated implementation of a class by allowing you to pass in a type as a parameter. As an example: a List<int>
vs a List<char>
simplyfies you from having to make a IntList
class and a CharList
class.
If you want the behavior of storing any dynamically allocated types within the same array then this is not as easy. I would recommend looking at c++17 std::any
and std::variant
types or if older version of the language the boost boost::any
and boost::variant
types from the boost library. Other ways to do this without the standard libraries is by using polymorphism or void*
.
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
There is a couple problems with this code, first of which is the next member of Node does not have a template type defined, usually in this case if you want to make a linked list of one generic type you would do something like Node<t>* next
. Second is the fact that you are assigning what seems to be an Node* to a Node*.
If what you are trying to do is create a linked list of different types you cannot do it this way. Simply put, the reason is because you have to pass in a type for the t
argument and because of this each node must have a defined type. The purpose of template classes is not to allow user to allocate any generic type willy nilly but rather to simplify repeated implementation of a class by allowing you to pass in a type as a parameter. As an example: a List<int>
vs a List<char>
simplyfies you from having to make a IntList
class and a CharList
class.
If you want the behavior of storing any dynamically allocated types within the same array then this is not as easy. I would recommend looking at c++17 std::any
and std::variant
types or if older version of the language the boost boost::any
and boost::variant
types from the boost library. Other ways to do this without the standard libraries is by using polymorphism or void*
.
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
add a comment |
up vote
0
down vote
There is a couple problems with this code, first of which is the next member of Node does not have a template type defined, usually in this case if you want to make a linked list of one generic type you would do something like Node<t>* next
. Second is the fact that you are assigning what seems to be an Node* to a Node*.
If what you are trying to do is create a linked list of different types you cannot do it this way. Simply put, the reason is because you have to pass in a type for the t
argument and because of this each node must have a defined type. The purpose of template classes is not to allow user to allocate any generic type willy nilly but rather to simplify repeated implementation of a class by allowing you to pass in a type as a parameter. As an example: a List<int>
vs a List<char>
simplyfies you from having to make a IntList
class and a CharList
class.
If you want the behavior of storing any dynamically allocated types within the same array then this is not as easy. I would recommend looking at c++17 std::any
and std::variant
types or if older version of the language the boost boost::any
and boost::variant
types from the boost library. Other ways to do this without the standard libraries is by using polymorphism or void*
.
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
add a comment |
up vote
0
down vote
up vote
0
down vote
There is a couple problems with this code, first of which is the next member of Node does not have a template type defined, usually in this case if you want to make a linked list of one generic type you would do something like Node<t>* next
. Second is the fact that you are assigning what seems to be an Node* to a Node*.
If what you are trying to do is create a linked list of different types you cannot do it this way. Simply put, the reason is because you have to pass in a type for the t
argument and because of this each node must have a defined type. The purpose of template classes is not to allow user to allocate any generic type willy nilly but rather to simplify repeated implementation of a class by allowing you to pass in a type as a parameter. As an example: a List<int>
vs a List<char>
simplyfies you from having to make a IntList
class and a CharList
class.
If you want the behavior of storing any dynamically allocated types within the same array then this is not as easy. I would recommend looking at c++17 std::any
and std::variant
types or if older version of the language the boost boost::any
and boost::variant
types from the boost library. Other ways to do this without the standard libraries is by using polymorphism or void*
.
There is a couple problems with this code, first of which is the next member of Node does not have a template type defined, usually in this case if you want to make a linked list of one generic type you would do something like Node<t>* next
. Second is the fact that you are assigning what seems to be an Node* to a Node*.
If what you are trying to do is create a linked list of different types you cannot do it this way. Simply put, the reason is because you have to pass in a type for the t
argument and because of this each node must have a defined type. The purpose of template classes is not to allow user to allocate any generic type willy nilly but rather to simplify repeated implementation of a class by allowing you to pass in a type as a parameter. As an example: a List<int>
vs a List<char>
simplyfies you from having to make a IntList
class and a CharList
class.
If you want the behavior of storing any dynamically allocated types within the same array then this is not as easy. I would recommend looking at c++17 std::any
and std::variant
types or if older version of the language the boost boost::any
and boost::variant
types from the boost library. Other ways to do this without the standard libraries is by using polymorphism or void*
.
answered Nov 9 at 2:25
Patrick
808
808
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
add a comment |
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
Awesome, Thanks! I haven't done any c++ template programming before, Now I understand what is c++ template programming for and the difference between compiled language and interpreted language. Here is the link to create a generic linked list in c
– Kuisong Zheng
Nov 10 at 0:55
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53218765%2fc-template-linked-list-which-can-hold-any-types%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Welcome to SO. Did you Google about it?
– tod
Nov 9 at 2:07