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;
}