我有一个模板类,
template< typename T >
class A
{
private:
T *array;
public:
A(int size)
{
//Initialises array with size
}
}
现在我需要有一个接收类A的对象作为构造函数参数的类B,并将它分配给A引用的B本地成员。我怎么做?我试过了,
class B
{
private:
template<class T>
A<T> *a;
public:
template<class T>
B(A<T>(int) ar){
//assign ar to a
}
}
有人可以帮我解决这个问题吗?
更新
实际上我想在这里实现的是,认为A类是一个通用的循环缓冲区,它可以像A< int > int_buffer(20);
一样初始化,并且在不同的类中使用相同的int_buffer,比如B和C(生产者和消费者) )。这是实现我的目标的正确方法还是你可以建议的任何更好的方法。
答案 0 :(得分:2)
您只需要将B
作为模板:
template <typename T>
class B {
A<T>* a;
public:
B(A<T>* ar) : a(ar) {}
};
这解决了共享指针的问题。如果B<T>
依赖于外部拥有的A<T>*
,或A<T>*
的所有权也被转移到B<T>
,那么作为读者,我不清楚}。 C ++ 11为您提供了一些分享指针的好工具,我强烈建议您利用它们。
如果您要共享A<T>*
但是它将在外部拥有,请使用shared_ptr
如果您在构建时转让A<T>*
的所有权,请使用unique_ptr
表示。
修改强>
B<T>
包含成员对象A<T>
。但它由指针控制。 通过指针或引用持有成员表示对象使用是共享的,或者所有权是外部的。
如果不了解您的设计,很难提出一个好的设计原则,所以我在这里给出一些可选的情况,建议你坚持一个符合你情况的那个:
B<T>
&#39; A<T>
成员仅在单个B<T>
对象中使用,则该成员需要在B<T>
&#39; s内创建构造者或建造者B<T>
之间共享A<T>
个B<T>
成员,则该成员应该是B
类的静态成员A<T>
归B<T>
所有,但只能通过指针接收,请使用unique_ptr<A<T>>
而不是A<T>*
作为会员类型A<T>
将在外部共享且不会被删除,只要至少保留一个对其的引用,请使用shared_ptr<A<T>>
而不是A<T>*
作为成员类型A<T>
在外部拥有且可能已销毁或未销毁,请使用weak_ptr<A<T>>
而不是A<T>*
作为会员类型答案 1 :(得分:0)
你的问题不明确。你想完成这个吗?
class B
{
private:
A<int> *a;
public:
B(A<int> ar){
//assign ar to a
}
};