Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   C++ (http://www.programmingforums.org/forum15.html)
-   -   Which is preferable? (http://www.programmingforums.org/showthread.php?t=10070)

uman May 30th, 2006 1:21 AM

Which is preferable?
 
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.

grumpy May 30th, 2006 6:14 AM

The answer is, simply, "it depends".

The first form allows you to create a deck of any type of card (as long as the type acts in a way that your Deck expects) while the second form only supports a deck of your Card<> type.

If all of your cards are going to be a specialisation of your Card class, use the second form. If you anticipate a potential need to use other types of card, use the first form.

uman May 30th, 2006 1:11 PM

Thanks for the input.


All times are GMT -5. The time now is 7:49 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC