虽然为了便于对现有代码库进行单元测试而重构代码,但我发现一个代码片段如下所示:
template <typename T>
class B {
public:
B(T* t) : t_(t) {}
void do_that() { t_->do_abc(); }
private:
T* t_;
};
template <typename T1,typename T2>
class A {
public:
class NA {
public:
NA(A* a) : a_(a) {}
void do_abc() { a_->do_xy(); }
private:
A* a_;
};
A(T1 t1,T2 t2) : t1_(t1),t2_(t2) {
auto na = new NA(this);
b_ = new B<NA>(na);
}
void do_this() { b_->do_that(); }
void do_xy() { t1_.do_x(); t2_.do_y(); }
private:
T1 t1_;
T2 t2_;
B<NA>* b_;
};
简而言之:A
取决于T1
,T2
和B
。 B
依赖于嵌套在NA
中的A
,NA
依赖于A
。
我想将B<NA>
作为模板参数class A
并将some b
传递给A's constructor
(就像T1
和T2
一样)。
我首先尝试将NA
移到A
的外面,并同时将B
和NA
的模板参数设为A
,但它不能像NA
取决于A
(通过A* a_;
和a_->do_xy();
)。
我应该做什么?