可変数の引数でオーバーロードを使用し続ける方法はありますか?
具体例は次のとおりです。
// Third party class
class ABC
{
public:
void addValue(int);
void addValue(float);
void addValue(string);
void execute(); // Any number of add values can be called before the execute
};
現在、このクラスのオブジェクトに値を追加したい場合、次のようにする必要があります: ABC *obj = new ABC(); obj->addValue(2.0); obj->addValue("文字列"); obj->execute();
クライアント コードですべての addValues を 1 行で実行できる方法はありますか?
次のようにマクロを使用してみましたが、引数の数ごとにマクロを定義する必要があります。
#define ADD_1_VALUES_TO_CLASS_ABC(obj, val1) { \
obj->addValue(val1) }
#define ADD_2_VALUES_TO_CLASS_ABC(obj, val1, val2) { \
obj->addValue(val1); obj->addValue(val2) }
#define ADD_3_VALUES_TO_CLASS_ABC(obj, val1, val2, val3) { \
obj->addValue(val1) ; obj->addValue(val2); obj->addValue(val3) }
MACRO ADD_N_VALUES_TO_CLASS_ABC を定義して次のように呼び出す一般的な方法はありますか
ABC *obj = new ABC();
MACRO ADD_N_VALUES_TO_CLASS_ABC(obj, "String", 1.0, 4);
MACRO ADD_N_VALUES_TO_CLASS_ABC(obj, 1, 2.0, "String", 4.0, 3);
また、可変数の引数 va_args を使用すると、オーバーロードされた関数を呼び出すために必要な型情報が失われますか?
前もって感謝します。