C++ 类似vprintf的函数,但需要字符串ID

C++ 类似vprintf的函数,但需要字符串ID,c++,mfc,C++,Mfc,我需要一些非常相似的东西,但要有所改变 #include <stdio.h> #include <stdarg.h> void WriteFormatted ( const char * format, ... ) { va_list args; va_start (args, format); vprintf (format, args); va_end (args); } int main () { WriteFormatted ("Call

我需要一些非常相似的东西,但要有所改变

#include <stdio.h>
#include <stdarg.h>

void WriteFormatted ( const char * format, ... )
{
  va_list args;
  va_start (args, format);
  vprintf (format, args);
  va_end (args);
}

int main ()
{
   WriteFormatted ("Call with %d variable argument.\n",1);

   return 0;
}
更新/调整


我总是可以先从id加载字符串,然后调用原始的WriteFormatted()函数,但我不想这样做的原因是我正在重构代码,而这个调用有很多地方。因此,我希望传递字符串id,让函数加载该字符串,而不是在每个位置调用它。

如果您希望将
格式
-字符串作为一个资源进行管理,那么我建议按如下方式重写代码。我假设
LoadString
返回一个
std::string
;如果不是,则相应地调整代码。请注意,同时提供表示一种格式和一种格式的ID没有多大意义:然后将哪个ID传递给
vprintf
?。希望能有帮助

void WriteFormatted (int stringId formatId, ... )
{
  va_list args;
  va_start (args, formatId);
  std::string formatStr = LoadString(formatId);
  const char* format = formatStr.c_str();
  vprintf (format, args);
  va_end (args);
}

int main ()
{
   WriteFormatted (STRING_ID_ONE_ARGUMENT, 1);

   return 0;
}

那么这些身份证是怎样的;已存储的s和字符串?@Elemental是其资源字符串。使用LoadString(id)函数加载它。这一部分非常简单;我不明白为什么您认为第二个参数必须是字符串。有什么问题:
void WriteFormatted(int-stringId,…)
?如果你重构,就要正确地进行重构。“使用它没有什么意义,因为第二个参数必须是字符串。”为什么???为什么必须是一根弦?
void WriteFormatted (int stringId formatId, ... )
{
  va_list args;
  va_start (args, formatId);
  std::string formatStr = LoadString(formatId);
  const char* format = formatStr.c_str();
  vprintf (format, args);
  va_end (args);
}

int main ()
{
   WriteFormatted (STRING_ID_ONE_ARGUMENT, 1);

   return 0;
}