I'm writing a program that uses playing cards. In my card class, I'm not hardcoding the fact that there are four suits and thirteen numbers in each, because I want it to be flexible to allow me to in the future create decks of non-standard cards, e.g. tarot cards.
So I have this:
//suits: number of suits
//numbers: number of members of each suit
template<unsigned suits, unsigned numbers> class Card
{
/* ... */
} So far so good. But now I have another class called Deck, which is basically a glorified container for Card. I have two thoughts on how to do this. Either
template<class card_type> class Deck
{
std::deque<card_type> card_container;
/* ... */
} or
template<unsigned suits, unsigned numbers> class Deck
{
std::deque<Card<suits,numbers>> card_container;
/* ... */
} Is there a standard as to which of these is better? If not, are there any advantages or disadvantages to either approach? If not, then it is just a matter of style; which do you prefer?
Note: There may be syntax errors in this post as I'm just getting back into programming after a long absense. I hope, however, that you can understand my point. If you find any errors, please correct me.