P
Pallav singh
Hi All ,
i am getting Error while specialization of Template Function on Meta -
Template Class
Thanking in Advance.
------------------ file1.h -----------------------------------
template <typename T>
class Foo {
T data;
public:
Foo(T in);
template <typename TT> void bar(TT value);
};
=========== End of File =============
-------------------------file1.hpp -----------------------------
#include "file1.h"
#include <iostream>
#include <string>
using namespace std;
template <typename T>
Foo<T> :: Foo(T input) : data(input) { }
template <typename T>
template <typename TT>
void Foo<T> :: bar(TT value)
{
cout << " Foo<T> :: void bar(TT value) : " << value << endl;
}
template <typename T>
void Foo<T> :: bar<string>(string value)
{
cout << " Foo<T> :: String Specialization : " << value << endl;
}
=============================================
----------------------------------- file1.cpp
----------------------------------------
#include "file1.h"
#include <iostream>
using namespace std;
template <>
class Foo<int> {
int data;
public:
Foo(int in) : data(in) { }
template<typename TT>
void bar(TT value) {
cout << "default: " << static_cast<int>(value)*data << endl;
}
};
template <>
void Foo<int> :: bar(double value) {
cout << "special: " << value*data << endl;
}
==========================================
----------------------- ExportFile.cc
--------------------------------------
#include "file1.hpp"
#include <string>
using namespace std;
//////// Specialization part //////////
template class Foo<int>;
template class Foo<string>;
template class Foo<float>;
template class Foo<char>;
// Explicit generation of Function Symbol
// Explicit Instantation of Function inside Class
template void Foo<char> :: bar<char> ( char );
template void Foo<int> :: bar<int> ( int );
template void Foo<float> :: bar<float> ( float );
template void Foo<string> :: bar<string> ( string )
================================================
$ g++ -c -g file1.cc ExportFile.cc
In file included from ExportFile.cc:1:0:
file1.hpp:19:41: error: template-id `bar<std::string>' in declaration
of primary
template
file1.hpp:19:7: error: prototype for `void Foo<T>::bar(std::string)'
does not ma
tch any in class `Foo<T>'
file1.h:7:45: error: candidate is: template<class T> template<class
TT> void Foo
::bar(TT)
Thanks
Pallav Singh
i am getting Error while specialization of Template Function on Meta -
Template Class
Thanking in Advance.
------------------ file1.h -----------------------------------
template <typename T>
class Foo {
T data;
public:
Foo(T in);
template <typename TT> void bar(TT value);
};
=========== End of File =============
-------------------------file1.hpp -----------------------------
#include "file1.h"
#include <iostream>
#include <string>
using namespace std;
template <typename T>
Foo<T> :: Foo(T input) : data(input) { }
template <typename T>
template <typename TT>
void Foo<T> :: bar(TT value)
{
cout << " Foo<T> :: void bar(TT value) : " << value << endl;
}
template <typename T>
void Foo<T> :: bar<string>(string value)
{
cout << " Foo<T> :: String Specialization : " << value << endl;
}
=============================================
----------------------------------- file1.cpp
----------------------------------------
#include "file1.h"
#include <iostream>
using namespace std;
template <>
class Foo<int> {
int data;
public:
Foo(int in) : data(in) { }
template<typename TT>
void bar(TT value) {
cout << "default: " << static_cast<int>(value)*data << endl;
}
};
template <>
void Foo<int> :: bar(double value) {
cout << "special: " << value*data << endl;
}
==========================================
----------------------- ExportFile.cc
--------------------------------------
#include "file1.hpp"
#include <string>
using namespace std;
//////// Specialization part //////////
template class Foo<int>;
template class Foo<string>;
template class Foo<float>;
template class Foo<char>;
// Explicit generation of Function Symbol
// Explicit Instantation of Function inside Class
template void Foo<char> :: bar<char> ( char );
template void Foo<int> :: bar<int> ( int );
template void Foo<float> :: bar<float> ( float );
template void Foo<string> :: bar<string> ( string )
================================================
$ g++ -c -g file1.cc ExportFile.cc
In file included from ExportFile.cc:1:0:
file1.hpp:19:41: error: template-id `bar<std::string>' in declaration
of primary
template
file1.hpp:19:7: error: prototype for `void Foo<T>::bar(std::string)'
does not ma
tch any in class `Foo<T>'
file1.h:7:45: error: candidate is: template<class T> template<class
TT> void Foo
::bar(TT)
Thanks
Pallav Singh