次のように、3つのクラスがあります。
template <typename RET, typename ARG1 = int, [...], typename ARG5 = int>
class FunctionPointer {
virtual operator()(ARG1, [...], ARG5);
};
template <typename RET, class TYPE, typename ARG1 = int, [...], typename ARG5 = int>
class ClassFunctionPointer : public FunctionPointer<RET, ARG1, [...], ARG5> {
// make it so that class functions fit here
};
template <typename RET, typename ARG1 = int, [...], typename ARG5 = int>
class GlobalFunctionPointer : public FunctionPointer<RET, ARG1, [...], ARG5> {
// make it so that non-member functions fit here
};
これらはすべてオーバーロードされているため、すべてのクラスは可変数の引数でインスタンス化できます。つまり、次の例はすべて有効です。
GlobalFunctionPointer<void> a(&test1);
GlobalFunctionPointer<void, int> b(&test2);
ClassFunctionPointer<void, TestClass, int, char> c(testObject, &TestClass::test1);
ClassFunctionPointer<void, TestClass, int, char, std::string, float, SomeClass> d(testObject, &TestClass::test2);
しかし、これらすべてのために、約 500 行の大量のコードを作成しました。ここを参照してください。これはかなり醜いので、よりエレガントなソリューションを探しています。まったくありますか?
(ちなみに、複雑なコードはすべて、より洗練されたイベント システムのベースになることを意図しています。)