PaulDaPigeon
PaulDaPigeon

Reputation: 303

C++ specializing a member function

I need to make a class with a generic data member, that works something like istream. For all types it should be able to store data that it recieves by the << operator. I want it to work for single variables unless the class is created for char, where it should work for C strings.

template <typename T>
class foo<C>{
    T* data;
public:
    void operator << (T t);
};

template <typename T>
class foo<char>: public foo<T>{
public:
    void operator << (char* str)
};

This is how I tried to solve it, but I get an erro saying: explicit specialization is using partial specialization syntax.

Upvotes: 0

Views: 134

Answers (2)

Ben Voigt
Ben Voigt

Reputation: 283624

Is this what you intended?

template <typename T>
class foo
{
    T* data;
public:
    void operator<<(T t);
};

template <>
class foo<char>
{
public:
    void operator<<(char* str);
};

If you meant to inherit behavior, you'll need something like this:

template <typename T>
class foo_impl
{
    T* data;
public:
    void operator<<(T t);
};

template <typename T>
class foo : public foo_impl<T>
{
};

template <>
class foo<char> : public foo_impl<char>
{
public:
    void operator<<(char* str);
};

(or, even simpler by eliminating unneeded occurrences of public)

template <typename T>
class foo_impl
{
    T* data;
public:
    void operator<<(T t);
};

template <typename T>
struct foo : foo_impl<T>
{
};

template <>
struct foo<char> : foo_impl<char>
{
    void operator<<(char* str);
};

And I would suggest some const-correctness:

template <typename T>
class foo_impl
{
    T* data;
public:
    void operator<<(const T& t);
};

template <typename T>
struct foo : foo_impl<T>
{
};

template <>
struct foo<char> : foo_impl<char>
{
    void operator<<(const char* str);
};

Upvotes: 2

Richard
Richard

Reputation: 242

You cannot specify a template type within the class declaration.

template <typename T>
class foo{
    T* data;
public:
    void operator << (T t);
};

Try this. It may also help to read the cplusplus.com documentation on templates. http://www.cplusplus.com/doc/tutorial/templates/

Upvotes: 0

Related Questions