LINUX.ORG.RU

Частичная специализация метода класса?

 


0

2

хочется чего то такого

template <typename T> struct A{};

template <typename S> struct C{
	void f();
};

template <typename T> void C<A<T> >::f(){}

int main(int argc, const char**argv){
	C<A<int> > c;
	return 0;
}
вылетает ошибка
tmp$ g++ -std=c++11 -Wall test.cpp
test.cpp:7:40: error: invalid use of incomplete type ‘struct C<A<T> >’
 template <typename T> void C<A<T> >::f(){}
                                        ^
test.cpp:3:30: note: declaration of ‘struct C<A<T> >’
 template <typename S> struct C{
                              ^
компайлер g++-6.2, но хотелось бы что бы работало начиная с 4.8

Я научу тебя шаблонной магии :)

Работает даже на С++98

1.cpp

#include <iostream>

using std::cout;
using std::endl;

template <typename T> struct A {};

template <typename S> struct C
{
    void f();
};

template <typename T>
class C< A<T> > : public C<T>
{
public:
    void f()
    {
        cout << "Partially Specialized Template Class - Function F invoked ..." << endl;
    }
};


int main()
{
    C<A<int> > c;
    c.f();
}
g++-7 -std=c++98 1.cpp
./a.out
Partially Specialized Template Class - Function F invoked ...

fsb4000 ()