我可以将结构传递给`std::format`吗?

问题描述 投票:0回答:1

我有这个结构,我需要传递给

std::format

#include <format>
#include <iostream>
#include <sstream>
#include <string>

struct Str {
   int i;
   float f;
   std::string s;
   Str() {}
   Str(int p_i, float p_f, const std::string &p_s) :
      i(p_i), f(p_f), s(p_s) {}

   std::string GetString() {
       std::stringstream ostr;
       ostr << i << " " << f << " " << s;
       return ostr.str();
   }
};

int main() {
    std::string str;
    Str obj(1, 2.3, "test");

    // OK
    str = std::format("Test structure (format) {} {} {}", obj.i, obj.f, obj.s);

    // OK    
    str = std::format("Test structure (format) {}", obj.GetString());

    // Compile time error    
    str = std::format("Test structure (format) {}", obj);
}

有没有办法将整个结构传递给

std::format
,而不必指定其所有字段,或者必须将它们转换为
std::string

c++ c++20 stdstring fmt stdformat
1个回答
0
投票

您可以使用

std::formatter
。这也将允许您使用自定义格式规范。

© www.soinside.com 2019 - 2024. All rights reserved.