.hpp
template <typename T>
struct A { virtual A& modify() = 0; };
template <typename T>
struct B : virtual A<T> {};
template <typename T>
struct C : B<T> { C& modify() final; };
.cpp
template <typename T>
C<T>& C<T>::modify() {
// …
return *this;
}
// explicit instantiation
template struct C<double>;
我需要一些方法来返回引用以制作“链”/定义赋值运算符/等:
C<double> a, b, c;
// …
a = (b = c).modify();
我还必须处理虚拟继承以避免“钻石问题”(为简单起见,此处省略)。
但是,这不起作用:
MSVC:
Error C2908: explicit specialization;
'A<T> &C<T>::modify(void)' has already been instantiated
显式实例化在没有虚拟继承的情况下工作得很好。所以我想知道这里有什么问题。(如果没有返回对象引用/指针的成员函数,一切正常。)