我想做的:一个简单的存储类,定义为尽可能通用的模板。并且能够从这个类派生另一个,它可以接受任何东西,将其转换为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;
}
当然,这不起作用:
pierre@raringbeast:~/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 类中的方法定义,或者这是一个非常糟糕的主意?
--
编辑:公开继承。