C++ 使用fmt库通过回退到指针格式化类型

C++ 使用fmt库通过回退到指针格式化类型,c++,c++14,fmt,C++,C++14,Fmt,我正在尝试使用 fmt::format(“预期:'{}'对'{}',getDataOrPointer(rA),getDataOrPointer(rB)); 其中getDataOrPointer应返回void指针(始终可以格式化)或存在格式化程序时的默认值: /!如果存在'fmt::formatter',则返回类型。 模板 decltype(自动)获取数据或指针(常量T和rData) { 返回rData; } //! 如果不存在'fmt::formatter',则返回空指针。 模板>*=0> 常

我正在尝试使用

fmt::format(“预期:'{}'对'{}',getDataOrPointer(rA),getDataOrPointer(rB));
其中
getDataOrPointer
应返回
void
指针(始终可以格式化)或存在格式化程序时的默认值:

/!如果存在'fmt::formatter',则返回类型。
模板
decltype(自动)获取数据或指针(常量T和rData)
{
返回rData;
}
//! 如果不存在'fmt::formatter',则返回空指针。
模板>*=0>
常量无效*获取数据或指针(常量T和rData)
{
返回静态_cast(&rData);
}

我不知道如何写:
hasFormatter
检查
fmt
库是否可以格式化它?。我只想在本地使用此回退,但并不总是如此。

您可以使用
fmt::has_formatter
,引用:

has_formatter
告诉您类型
T
有一个
格式化程序
专门用于
上下文
(上下文基本上指定字符和输出迭代器类型),它可以与SFINAE一起使用。示例:。主要的警告是,具有隐式转换的类型可以是可格式化的,但没有
格式化程序
专门化

看见