4

有什么方法可以打印使用{fmt}引用的字符串?

这是一个示例代码,显示了我想要实现的目标:

fmt::print("Hello {}!", "Terens");

我希望代码打印Hello "Terens"!而不是Hello Terens!.

编辑:我想使用 API 来打印事先未知的不同数据(我正在为一个库编写这个,所以当数据是 astd::stringstd::string_view.

4

2 回答 2

5

您可以在格式字符串中将“{}”括在引号中,也可以使用std::quoted. 例如(https://godbolt.org/z/f6TTb5):

#include <fmt/ostream.h>
#include <iomanip>

int main(){
  fmt::print("Hello {}!", std::quoted("Terens"));
}

输出:

Hello "Terens"!
于 2021-03-10T13:23:57.833 回答
2

我想使用 API 来打印事先不知道的不同数据(我正在为一个库编写这个,所以当数据是 std::string 或 std::string_view 时,我特别想要一个带引号的输出。

以下代码:

#include <fmt/core.h>

template<typename T>
const T& myprint_get(const T& t) {
    return t;
}
std::string myprint_get(const std::string& t) {
    return "\"" + t + "\"";
}

template<typename ...T>
void myprint(const char *fmt, T... t) {
    fmt::print(fmt, myprint_get(t)...);
}

int main() {
    myprint("{} {}", std::string("string"), 5);
}

输出

"string" 5

这应该足以让你开始。

于 2021-03-10T13:45:13.313 回答