きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

テンプレートで関数のインターフェイスを規定

規定の抽象クラスBがあって、これを継承してクラスCがある。このとき、基底クラスBのメソッドfuncをクラスCで公開したいが、部分的な処理だけを派生クラスで定義し、funcの外枠はBで定義したい例。

#include <iostream>

using namespace std;

template <typename T, typename ...Args>
class B {
public:
	void func() {
		for(int i = 0; i < 5; ++i) {
			func_if(i);
		}
	}
private:
	virtual void func_if(Args ...args) = 0;
};

class C : public B<C, int> {
private:
	virtual void func_if(int x) {
		cout << x << endl;
	}
};


int main() {
	C c;
	c.func();

	cin.get();
	return 0;
}