我试图通过以下方式专门针对两个不同的类使用相同的模板:
template <>
struct TemplateClass<A> {
void method(A x) {
std::cout << x << std::endl;
}
};
template <>
struct TemplateClass<B> {
void method(B x) {
std::cout << x << std::endl;
}
};
有没有一种方法可以重写此方法以避免两个专门化定义中的重复?
我无法控制
TemplateClass
的定义。我想到的特定应用是fmt::formatter
的特殊化,如下所示:https://fmt.dev/latest/api.html#formatting-user-defined-types
最佳答案
如果您在struct formatter
中查看fmt/core.h
的定义,则它具有一个虚拟typename = void
参数:
template <typename T, typename Char = char, typename Enable = void>
struct formatter
此伪参数使您可以进行特化的SFINAE:
template <typename T>
struct formatter<T, char, std::enable_if_t<std::is_same_v<T, A> || std::is_same_v<T, B>>>
{
// ...
};
关于c++ - 将两种不同类型的模板定义专门化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907372/