是否有一個簡單的API(無循環)來檢查可變參數是否包含某些值(char *)?C++檢查可變參數是否包含
如果沒有簡單的API,我應該如何迭代而沒有任何參數?
我的方法應該能夠過濾配置IP上的日誌庫,所以我需要檢查其中一個參數是否爲10.3.2.2(某些配置IP)。
void Logger::Log(const char *format, ...) {
lock_guard<mutex> guard(mtx_);
if (!file_) {
file_ = fopen("application.log", "w");
}
time_t current = time(0);
tm *ptm = localtime(¤t);
stringstream ss;
ss << "\n[" << ptm->tm_min << ":" << ptm->tm_sec << "]";
fprintf(file_, ss.str().data());
va_list argptr;
va_start(argptr, format);
vfprintf(file_, format, argptr);
va_end(argptr);
fflush(file_);
}
尋找這個lesson,只顯示給定ARGS長度和類型進行迭代。格式和檢查包含的格式比較昂貴,並且記錄器應該能夠支持高性能需求。
我的目標是實現簡單的記錄器方法。所以你會這樣稱呼它:
Log("trafic from ip %s to ip %s", "10.1.1.1","1.1.1.1")
和很多其他調用。在過濾器中,我想檢查一個參數值是否爲「10.1.1.1」(例如),所以不要記錄它。
不,在C++中沒有這樣做。 – tenfour
在本課中,您錯誤地指出只是給出長度的迭代。在那個例子中,你也被告知所有的參數都是雙精度的。你需要參數的類型以及長度,這對你的情況來說是個大問題。 –
@DavidSchwartz你是對的。我的意思是我甚至沒有長度。 –