【发布时间】:2021-12-28 13:17:21
【问题描述】:
我有课
template<int n> MyClass<n>
我正在尝试为其定义operator &。我希望能够执行 MyClass&MyClass,而且 MyClass&MyClass(或者 MyClass&MyClass 也适用于我)显然具有不同的功能。
template <size_t n>
struct MyClass
{
//...a lot of stuff
MyClass<n> operator&(const MyClass<n> &other) const;
MyClass<n> operator&(const MyClass<1> &other) const;
}
但是,我无法编译这个,至于 n 为 1 的情况它们会发生冲突。我尝试添加 SFINAE,但显然我对它的理解不够充分,无法在这种情况下使用它。
template <size_t n>
struct MyClass
{
//...a lot of stuff
MyClass<n> operator&(const MyClass<n> &other) const;
std::enable_if_t<n != 1, MyClass<n>> operator&(const MyClass<1> &other) const;
}
不能确保 n 为 1 的情况不会导致问题。我认为这是因为 SFINAE 适用于函数模板参数本身,而不适用于类模板参数。
我相信我可以专门化MyClass<1>,但是我必须复制MyClass<n> 的所有内容。有什么简单的解决办法吗?
【问题讨论】: