私がやりたいこと:できるだけ一般的なテンプレートとして定義された単純なストレージクラス。そして、このクラスから別のクラスを派生させることができます。これは、何でも受け入れ、変換し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 クラスのメソッド定義を強制的に使用させる方法はありますか、それとも本当に悪い考えですか?
--
編集:継承を公開しました。