jeudi 6 avril 2017

Parent variadic function template specialized in child

is this code formally ok? Because I not sure if I may specialized template function in child class as in this example:

main.cpp:

class Consumer
{
public:
    Consumer() = default;
    ~Consumer() = default;
    template<typename... T>
    void echo(iConnector& connector, T... args)
    {
        connector.transfer(args...);
    }
};

int main(int argc, char** argv) {
    Consumer c;
    intConnector i;
    stringConnector s;
    c.echo(i, 1);
    c.echo(i, std::string("aaa"));
    c.echo(s, std::string("aaa"));
    c.echo(s, 1);
    return 0;
 }

iConnector.h

class iConnector {
public:
    iConnector() = default;
    virtual ~iConnector() = default;
    template<typename... T>
    void transfer(T... args) { std::cout << "Not defined\n"; }
};

intConnector.h

class intConnector : public iConnector {
public:
    intConnector() = default;
    virtual ~intConnector() = default;
};

intConnector.cpp

template<>
void iConnector::transfer<int>(int i)
{
    std::cout << "intConnector " << i << "\n";
}

stringConnector.h

class stringConnector : public iConnector {
public:
    stringConnector() = default;
    virtual ~stringConnector() = default;
}

stringConnector.cpp

template<>
void iConnector::transfer<std::string>(std::string str)
{
    std::cout << "stringConnector " << str << "\n";
}

Thank you for suggestions. Adrian

Aucun commentaire:

Enregistrer un commentaire