[英]c++ calling superclass constructor with va_arg
我有一個基類,其中包含一個帶有可變參數列表的構造函數:
class Super {
public:
Super(int num, ...);
...
}
現在,在我的子類構造函數中,我需要以某種方式調用這個超類構造函數,但是我該怎么做呢? 通常情況下,通常不起作用:
class Sub {
public:
Sub(int num, ...) : Super(???) { ... }
...
}
那我該怎么做而不是???
我有另一個接受向量的構造函數,但是有一個這樣的構造函數是客戶端的直接要求。
與任何變量函數一樣,也始終提供列表版本:
void foo(int a, ...) { va_list ap; va_start(ap, a); vfoo(a, ap); va_end(ap); }
void vfoo(int a, va_list ap) { /* actual implementation */ }
同樣在這里:
#include <cstdarg>
struct Super
{
Super(int num, ...) : Super(num, (va_start(ap_, num), ap_)) { va_end(ap_); }
Super(int num, va_list ap);
private:
va_list ap_;
};
您的派生類將執行相同的vapacking體操,然后使用超級構造函數的列表形式。
如果有一個數據成員只是為了構造擾亂你和你的類是可復制的或可移動的,你也可以放棄變量構造函數,而是有一個命名的靜態成員函數來執行包裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.