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++
Template methods, declaration and Implementation in header file andoverloaded methods.
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="anto.anish, post: 3563012"] Hi , Since, i did not want to write instantiations in Source file of all template methods for various different datatypes that my client might use, i choose to write implementation of template methods along with their declarations in the header file. Well, there are also other files in the project, which include this header file as well, which all gets compiled, linked and tested well. #ifndef __ATT_H__ #define __ATT_H__ namespace TESTSPACE { class Att : public Abs { public: template<class T> unsigned long read(T& start, unsigned long count=0) { //Implementation written here } unsigned long read(std::back_insert_iterator< vector<std::string> >& start, unsigned long count=0) { //Implementation written here } template<class T> unsigned long write(T& start, T& stop) { //Implementation written here } unsigned long write(vector <std::string>::iterator& start, vector <std::string>::iterator& stop) { //Implementation written here } }; #endif However, to keep the header file look more reader friendly with just declarations and moving all the implementation towards the end of the header file as given below, however generates me errors as "error C2373: 'TESTSPACE::Att::read' : redefinition; different type modifiers. What am i missing here ? The template functions are basically overloaded methods, then why does the compiler throw error for the below code ? #ifndef __ATT_H__ #define __ATT_H__ namespace TESTSPACE { class Att : public Abs { public: template<class T> unsigned long read(T& start, unsigned long count=0); unsigned long read(std::back_insert_iterator< vector<std::string> >& start, unsigned long count=0); template<class T> unsigned long write(T& start, T& stop); unsigned long write(vector <std::string>::iterator& start, vector <std::string>::iterator& stop); }; //All implementations done here temporarily //Move below code to a separate "impl.h" file later template<class T> unsigned long Att::read(T& start, unsigned long count) { //Implementation written here } unsigned long Att::read(std::back_insert_iterator< vector<std::string> >& start, unsigned long count) { //Implementation written here } template<class T> unsigned long Att::write(T& start, T& stop) { //Implementation written here } unsigned long Att::write(vector <std::string>::iterator& start, vector <std::string>::iterator& stop) { //Implementation written here } #endif [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
C++
Template methods, declaration and Implementation in header file andoverloaded methods.
Top