我正在使用c ++ 11.我想编写一个获取格式化字符串的函数,而args(不知道有多少,需要是可变参数)并返回完整的字符串。
例如:
format = "TimeStampRecord Type=%u Version=%u OptimizeBlockID=%u WriteBlockID=%u Timestamp=%lu"
INDEX_RECORD_TYPE_TIMESTAMP = 3;
FORAMT_VERSION = 1;
optimizeBlockId = 549;
writeBlockId = 4294967295;
timestamp = 1668;
,返回值是一个看起来像这样的字符串:
"TimeStampRecord Type=3 Version=1 OptimizeBlockID=549 WriteBlockID=4294967295 Timestamp=1668"
任何有效的方法吗?
答案 0 :(得分:0)
您可以使用Boost Format。或者好老sprintf()
:
char buf[1000];
int bytes = snprintf(buf, sizeof(buf), format, INDEX_RECORD_TYPE_TIMESTAMP,
FORMAT_VERSION, optimizeBlockId, writeBlockId, timestamp);
assert(bytes < sizeof(buf));
string result(buf, min(sizeof(buf), bytes)); // now you have a C++ string
答案 1 :(得分:0)
您可以按照上面的建议使用snprintf。 如果您想自己实现它或使用自己的占位符:
#include "iostream"
#include "string"
void formatImpl(std::string& fmtStr) {
}
template<typename T, typename ...Ts>
void formatImpl(std::string& fmtStr, T arg, Ts... args) {
// Deal with fmtStr and the first arg
formatImpl(fmtStr, args...);
}
template<typename ...Ts>
std::string format(const std::string& fmtStr, Ts ...args) {
std::string fmtStr_(fmtStr);
formatImpl(fmtStr_, args...);
return fmtStr_;
}
int main() {
std::string fmtStr = "hello %your_placeholder world";
std::cout << format(fmtStr, 1, 'a') << std::endl;
return 0;
}