对于模板类,有没有什么办法使其中的某些成员函数在实例化时不加载?
本帖最后由 Croper 于 2018-12-25 00:02 编辑试图做一个集合类时遇到的问题:
比如现在有一个模板类A,和一个没有重载==的类B:
template <typename T> class A
{
public:
T a;
bool operator==(const A& anotherA)
{
return (this->a == anotherA.a); //这里使用了T的==
}
};
class B
{
int b;
};
int main()
{
A<B> a; //编译时报错,因为B没有运算符==的重载;
}
但是,我希望在使用一些支持”==”的类实例化A时能使用A的“==”符号,有没有什么办法能在T支持“==”时加载A<T>::operator==,而在T不支持"=="时自动不加载A<T>::operator==而不是直接无法编译呢? 本帖最后由 Croper 于 2018-12-24 23:52 编辑
不好意思,在这种最简状态下是可以编译的。。。我应该是在其他地方调用了这个函数,我可能误导大家了,抱歉。。 不对。。。这样就无法编译了
template <typename T> class A
{
public:
T a;
virtual bool operator==(const A& anotherA) //operator==声明为虚函数
{
return (this->a == anotherA.a); //这里使用了T的==
}
};
class B
{
int b;
};
int main()
{
A<B> a; //编译时报错,因为B没有运算符==的重载;
}
难道说虚函数在实例化时会被强制加载么。。这又是为什么。。?
页:
[1]