ページ 1 / 1
オーバーライドが邪魔です
Posted: 2012年10月17日(水) 21:33
by dom
現在以下のようなクラスを考えています。
template <int> class Test;
Test<0>は引数なしの関数func()をもつ。
Test<N>は引数にintをN個までとる関数func(int,...)をもつ。つまり、 func(), func(int), func(int,int), ... , func(int × N)のN+1個の関数を持つ。
その為に次のような実装を考えたのですが、オーバーライドにより基底クラスのfuncが無効になっていしまいます。
Nは10程度なのですが、地道に実装するしかないのでしょうか?
コード:
template <int>
class Test;
template<> class Test<0> {
void func();
};
template<> class Test<1> : public Test<0> {
void func(int);
};
template<> class Test<2> : public Test<1> {
void func(int, int);
};
// 以下同様......
Re: オーバーライドが邪魔です
Posted: 2012年10月17日(水) 22:08
by a5ua
こんな感じでどうですかね?
コード:
template <int>
class Test;
template<> class Test<0> {
public:
void func(){}
};
template<> class Test<1> : public Test<0> {
public:
using Test<0>::func;
void func(int){}
};
template<> class Test<2> : public Test<1> {
public:
using Test<1>::func;
void func(int, int){}
};
Re: オーバーライドが邪魔です
Posted: 2012年10月17日(水) 22:11
by h2so5
これはオーバーライドではありません。
サブクラスの func(int) が基底クラスの func() よりもクラススコープの内側にあるため、
func(int) が先に検索されてしまうのが原因です。
オーバーライドは基底クラスの関数が virtual で、サブクラスで同じ名前・引数の関数が定義されていないと成立しません。
同じ問題が紹介されていますので、参考にどうぞ
http://d.hatena.ne.jp/minekoa/20080222/1203696120
Re: オーバーライドが邪魔です
Posted: 2012年10月17日(水) 22:27
by dom
a5uaさん、h2so5さん、返信ありがとうございました。とても参考になりました。
c++は奥が深いですね。