Исходя из этого вопроса:
И учитывая этот упрощенный код:
#include <string>
#include <iostream>
class Abstract
{
public:
virtual void method(int a)
{
std::cout << __PRETTY_FUNCTION__ << "a: " << a << std::endl;
}
};
class Concrete : public Abstract
{
public:
void method(char c, std::string s)
{
std::cout << __PRETTY_FUNCTION__ << "c: " << c << "; s: " << s << std::endl;
}
};
int main()
{
Concrete c;
c.method(42); // error: no matching function for call to 'Concrete::method(int)'
c.method('a', std::string("S1_1"));
Abstract *ptr = &c;
ptr->method(13);
//ptr->method('b', std::string("string2")); <- FAIL, this is not declared in Abstract.
}
У меня есть два сомнения. 1. Я знаю, что могу исправить ошибку, если «импортирую» имя method
из Abstract
с помощью
using Abstract::method;
, но затем импортирую все перегрузки этого имени. Можно ли импортировать только данную перегрузку? (Предположим, Abstract
имеет более одной перегрузки, например:)
virtual void method(int a) = 0;
virtual void method(std::string s) = 0;
Можно ли импортировать все (публичные | защищенные | все) имена сразу из Abstract
, не перечисляя их по одному? (теперь предположим, что в дополнение к method
, Abstract
также имеет:)
virtual void foo() = 0;