Override pure virtual function from derived template class

Michal W

Does anyone knows why this code cannot be compiled in visual studio 2013? The problem lies in this that b.a() has only one version (the overrided one in B class a(float)) and version a(std::string) is unavailable although it is in base class.

#include <string>

template <typename T>
class A { 
public:
    virtual void a(std::string b){ this->a(123); }
    virtual void a(float b) = 0;
};

class B : public A < std::string > {
public:
    virtual void a(float b) override {}
};


main()
{
    B b;

    b.a(""); // Error here: error C2664: 
             // 'void B::a(float)' : cannot convert argument 1 from 'const char [1]' to 'float'

    B* bb = new B();
    bb->a(""); // same
}
Kerrek SB

If a derived class declares a name and you also want members of this name from base classes to be visible, you need to unhide those names explicitly, using using:

class B : public A<std::string>
{
public:
    using A<std::string>::a;
    virtual void a(float b) override {}
};

Now you can use all overloads of a:

B x;
x.a(1.2);
x.a("hello");

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

C++: Overriding virtual pure function derived from a template class

From Dev

Reimplement a virtual function from base class in a derived template class

From Dev

Why doesn't derived templated class's function override the non-templated base class's pure virtual function?

From Dev

Virtual function implemented as template in derived class

From Dev

Declaring pure virtual function in base class with derived class object as arguments

From Dev

Declaring pure virtual function in base class with derived class object as arguments

From Dev

accessing non-template base class virtual function from template derived class

From Dev

Deriving from pure virtual template class

From Dev

Avoiding "Pure Virtual Function Call" in Derived Class C++

From Dev

Derived classes not using all pure virtual methods from the base class

From Dev

calling a virtual function through a reference: derived class' override gets called

From Dev

Delete virtual function from a derived class

From Dev

Calling virtual method of base template from derived variadic template class

From Dev

C++ syntax of template class with pure virtual function?

From Java

Is it valid to "hide" a base class virtual function by making it pure virtual in derived classes?

From Dev

Overriding Pure Virtual Functions from a Template Base Class

From Dev

Warning when a function in a derived class fails to override a virtual function in a base class

From Dev

Warning when a function in a derived class fails to override a virtual function in a base class

From Dev

Accessing virtual base class function from a derived class

From Java

Is it valid to override virtual function with pure specifier?

From Dev

Pure virtual and override function (c++)

From Dev

Is it valid to override virtual function with pure specifier?

From Dev

Class with implementation of pure virtual function

From Dev

Calling a pure virtual function from base class that doesn't define it?

From Dev

How to return a generic derived class from a virtual function?

From Dev

Disable method override in template derived class

From Dev

Why is a virtual function in a derived class also virtual?

From Dev

Template function argument in derived class

From Dev

C++ class template or pure virtual

Related Related

  1. 1

    C++: Overriding virtual pure function derived from a template class

  2. 2

    Reimplement a virtual function from base class in a derived template class

  3. 3

    Why doesn't derived templated class's function override the non-templated base class's pure virtual function?

  4. 4

    Virtual function implemented as template in derived class

  5. 5

    Declaring pure virtual function in base class with derived class object as arguments

  6. 6

    Declaring pure virtual function in base class with derived class object as arguments

  7. 7

    accessing non-template base class virtual function from template derived class

  8. 8

    Deriving from pure virtual template class

  9. 9

    Avoiding "Pure Virtual Function Call" in Derived Class C++

  10. 10

    Derived classes not using all pure virtual methods from the base class

  11. 11

    calling a virtual function through a reference: derived class' override gets called

  12. 12

    Delete virtual function from a derived class

  13. 13

    Calling virtual method of base template from derived variadic template class

  14. 14

    C++ syntax of template class with pure virtual function?

  15. 15

    Is it valid to "hide" a base class virtual function by making it pure virtual in derived classes?

  16. 16

    Overriding Pure Virtual Functions from a Template Base Class

  17. 17

    Warning when a function in a derived class fails to override a virtual function in a base class

  18. 18

    Warning when a function in a derived class fails to override a virtual function in a base class

  19. 19

    Accessing virtual base class function from a derived class

  20. 20

    Is it valid to override virtual function with pure specifier?

  21. 21

    Pure virtual and override function (c++)

  22. 22

    Is it valid to override virtual function with pure specifier?

  23. 23

    Class with implementation of pure virtual function

  24. 24

    Calling a pure virtual function from base class that doesn't define it?

  25. 25

    How to return a generic derived class from a virtual function?

  26. 26

    Disable method override in template derived class

  27. 27

    Why is a virtual function in a derived class also virtual?

  28. 28

    Template function argument in derived class

  29. 29

    C++ class template or pure virtual

HotTag

Archive