c++ - SFINAE enable_if 与 is_same 用法
问题描述
我想写一个带有两个模板参数的模板类,当参数类型相同时,一个方法的实现可用,而当类型不同时,一个不同的实现可用。
我知道我可以通过模板专业化来做到这一点:
template<typename T, typename W> class MyClass {
public:
void myMethod() { std::cout << typeid(T).name() << " != " << typeid(W).name() << std::endl; }
};
template<typename T> class MyClass<T,T> {
public:
void myMethod() { std::cout << typeid(T).name() << " = " << typeid(T).name() << std::endl; }
};
但我试图在 SFINAE 范式上做得更好,所以试着写这样的东西:
template<typename T, typename W> class MyClass {
public:
template<typename T_ = T, typename W_ = W,
typename = std::enable_if_t<std::is_same_v<T_,W_>>> void myMethod() {
std::cout << typeid(T_).name() << " = " << typeid(W_).name() << std::endl;
}
template<typename T_ = T, typename W_ = W,
typename = std::enable_if_t<!std::is_same_v<T_,W_>>> void myMethod() {
std::cout << typeid(T_).name() << " != " << typeid(W_).name() << std::endl;
}
};
但是编译器说这是对方法的重新声明。
有人可以在这里纠正我对 SFINAE 的使用吗?
谢谢!
解决方案
推荐阅读
- python - 如何根据最大值删除元组列表的重复值?
- api - POST 请求在 Postman 中工作,但在 Android Studio 中不工作
- javascript - 如何使用 VSCode 导入 fetch?
- python - 如何用pyarmor和虚拟环境打包python代码?
- javascript - 找不到使用 Javascript 访问输入字段的方法
- pandas - 以与第二个数据帧相同的顺序引入数据帧行
- php - 终端中的作业处理编号 - laravel 中的队列
- awk - 如何让 awk 打印变量而不是完整匹配的行?
- python - ValueError:int() 的无效文字,基数为 10:'D1'
- json - JSON中的Powershell嵌套文件夹循环