如何确定一种类型是否支持使用C ++标准lib打印或格式化?

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

中是否有内置的检查器,该检查器检查类型是否可通过

operator<<
打印,或者是否可以通过
std::format
我试图搜索它,找不到内置的检查器来检查是否可以在类型上调用。我只找到
operator<<

,无法弄清楚如何使用它。 我想从

std::formattable<T>

使用内置类型的特征和概念,我不想创建自己的实用程序。
我想做的是:
std


我试图搜索它,找不到内置的检查器来检查是否可以在类型上调用。我只找到

template<typename DATA_T> struct std::formatter<MyClass<DATA_T>> : std::formatter<std::string> { static auto format(const MyClass<DATA_T>& my_class, std::format_context& ctx) { std::string result = std::format("Name: {}\n", my_class.name()); // Check if the data it holds printable or formattable and add it. // Should be replaced with correct usage if constexpr (std::formattable<DATA_T>) { result += std::format("Data: {}", my_class.data()); } // Should be replaced with correct std functionality else if constexpr (std::ostreambale<DATA_T>) { std::ostringstream oss; oss << my_class.data(); result += "Data: "; result += oss.str(); } result += std::format("\nLocation: {}", my_class.location()); return std::format_to(ctx.out(), "{}", result); } };

[...]

是的,这是正确的。对于通过
c++ templates std c++-concepts c++23
1个回答
7
投票
的流式,标准库中没有内置特征。因此,不幸的是,您必须定义自己的支票。
std::formattable<T>

在此更新中,您可能会这样做:
operator<<

(((请参见LiveDemo

))


    


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.