オーバーライドが邪魔です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

オーバーライドが邪魔です

#1

投稿記事 by dom » 12年前

現在以下のようなクラスを考えています。

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);
};

// 以下同様......

アバター
a5ua
記事: 199
登録日時: 14年前

Re: オーバーライドが邪魔です

#2

投稿記事 by a5ua » 12年前

こんな感じでどうですかね?

コード:

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){}
};

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: オーバーライドが邪魔です

#3

投稿記事 by h2so5 » 12年前

これはオーバーライドではありません。
サブクラスの func(int) が基底クラスの func() よりもクラススコープの内側にあるため、
func(int) が先に検索されてしまうのが原因です。

オーバーライドは基底クラスの関数が virtual で、サブクラスで同じ名前・引数の関数が定義されていないと成立しません。

同じ問題が紹介されていますので、参考にどうぞ
http://d.hatena.ne.jp/minekoa/20080222/1203696120

dom

Re: オーバーライドが邪魔です

#4

投稿記事 by dom » 12年前

a5uaさん、h2so5さん、返信ありがとうございました。とても参考になりました。
c++は奥が深いですね。

閉鎖

“C言語何でも質問掲示板” へ戻る