Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
C++
Questions about defaut template type argument
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="CoolPint, post: 1473600"] As a self-exercise, I am trying to write a generic Priority Queue, which would store any type and and accept any user-definable "priority" function. After much tinkering, I came up with something like below: class PMinimum { public: template <typename T> bool operator()(const T & a, const T & b) { return ( a < b ? true : false); } }; template <typename T, typename F = PMinimum > class PQueue { public: PQueue(); template <typename Iterator> PQueue(Iterator, Iterator); bool isEmpty() const; bool isFull() const; bool enQueue(const T &); bool deQueue(T &); bool getTop(T &); void clear(); private: int counter; DArray<T> heap; // DArray is my own template which works like <vector> F cmp; void buildHeap(); void shiftdown(int); }; I tested it and it works fine, but there are two things which I cannot do. First, how can I hide class PMinimum as a private member of PQueue template? If I bring the class definition as a private member, how do I specify it as the default template type argument? I tried below but it won't compile template <typename T, typename F = PQueue<T>::PMinimum > I tried putting forward declarations of PQueue template and PQueue<T>::PMinimum, but it still doesn't work. Making it a public nested class doesn't help either. But I want it to be hidden as a private member since I believe users of PQueue template doesn't need to know about it. How can I achieve it? Secondly, I noticed that PQueue works only if Functor classes are provided as the type argument to the second type parameter. For example, follwoing PQueue<double, Priority> pdq; would work only if "Priority" is a name of Functor class. Is it possible to make it accept both normal functions (function pointers) as well as Functors? I tried changing the interface so that the constructor accepts the "priority" function rather than accepting it as a type argument, but I cannot make it work to accept both function pointers and functors either. Making "cmp" a generic type requires a type parameter to be specified for the PQueue template, which brings me to the same problem. I would very much appreciate any help on these two problems. I can accept second problem might not be solved and only solution is to pass only functor classes. But if it can be done to accept both normal function pointers and functors, I would love to learn about it even it requires many changes to the interface. I think the first problem is due to my misunderstanding of the language syntax, feature, etc. So please help me learn to correct my mistakes. Thank you very much in advance. [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C++
Questions about defaut template type argument
Top