我使用Magento 2 REST API,并希望处理C ++中引发的错误。
错误响应示例:
{
"message": "Could not save category: %1",
"parameters": [
"URL key for specified store already exists."
]
}
我可以将它们都检索到String和std :: vector中,这让我想到了一个问题:
我如何返回通过填充占位符格式化的字符串?
在固定大小的情况下,我可以按照此方法进行操作
char* buffer = new char[200];
String message = "Could not save category: %1";
std::vector<String> parameters = {"URL key for specified store already exists."};
String result = sprintf(buffer,message.c_str(),parameters[0]);
但是,a,我事先不知道尺寸。
我应该如何去做?是否有stl函数可以提供帮助,是否应该使用自行编写的模板(对此没有经验),可以将std :: vector转换为va_list还是有其他解决方案?
答案 0 :(得分:1)
编辑:我没有注意到这要求C ++方言而不是Standard C ++。暂时保留它,可能对其他人有用。
不存在能够自动执行此操作的标准。话虽如此,如果您的插值格式仅为datetime2(6)
,则可能很容易编写:
%<number>
这会将结果放入string message = "Could not save category: %1";
std::vector<string> parameters = {"URL key for specified store already exists."};
for (size_t i = 0; i < parameters.size(); ++i) {
const auto interp = "%" + std::to_string(i+1);
const size_t pos = message.find(interp);
if (pos != std::string::npos)
message.replace(pos, interp.size(), parameters[i]);
}
字符串中。当然,这种实现方式是有限的,并不是特别有效,但是要再次正确地做到这一点,需要库大小的解决方案,而不是SO-answer大小的解决方案。