可変量の引数を持つ関数を定義するマクロがあります。マクロには、どの実際の関数を呼び出す必要があるかを決定するロジックがあります。私の現在のアプローチは次のとおりです。
#define FUNC(ret,args,args_call) \
ret my_func(args) { \
if( something ) other_func(args_call);\
return one_func(args_call);\
}
#define PARAM(...) __VA_ARGS__
私はそれを次のように使用します:
class AClass : public AInterface {
public:
FUNC(int,PARAM(int a, int b),PARAM(a,b))
};
それを行うためのより良い方法があるかどうか疑問に思っていました。
注:宣言された(my_func
私の例では)関数は、スーパークラスからメソッドを再実装するために使用されるため、テンプレート(私が知っているもの)を使用するアプローチは私の問題を解決しません。
Edit2:適切な可変個引数テンプレート関数を使用しても、スーパークラスの関数をオーバーライドするため、関数を宣言するマクロが必要です。
#define FUNC(ret,args,args_call) \
ret my_func(args) { \
return proper_variadic_templated_function<ret>(args_call);\
}