Что я хочу сделать: простой класс хранения, определяемый как шаблон как можно более общий. И, имея возможность извлечь из этого класса другой, который примет что-либо, преобразует его в int
(алгоритм здесь не уместен) и сохраните его в базовом классе.Полиморфизм и перегруженные функции с различными сигнатурами
Но это не работает должным образом. Вот минимальный тест я написал:
template<typename T>
class A {
public:
void f(T& foo) { }
};
class B : public A<int> {
public:
template<typename T>
void f(T& foo) { }
};
int main() {
A<int>* ptr = new B;
ptr->f("foo");
delete ptr;
return 0;
}
Конечно, это не работает:
[email protected]:~/Workspace/Test/src$ icpc -o Test Test.cpp
Test.cpp(16): error: a reference of type "int &" (not const-qualified) cannot
be initialized with a value of type "const char [4]"
ptr->f("foo");
^
compilation aborted for Test.cpp (code 2)
Есть ли способ заставить компилятор использовать определение метода из класса B, или это действительно Плохая идея?
-
Редактировать: Сделано наследство общественности.
Спасибо за полезное объяснение. Очевидно, мне придется подумать еще немного ... – Pierre