我正在嘗試將指向模板化物件的指標傳遞給另一個類。
template <int size>
class A {
public:
int a[size] = {0};
int getA(int n) {
return a[n];
}
};
class B {
public:
A<>* b;
void setB(A<>* n) {
b = n;
}
};
int main()
{
const int size1 = 10;
A<size1> data1;
B b1;
b1.setB(&data1);
}
這是行不通的。
作為一種解決方案,我可以將 B 類創建為模板類并創建B物件,B<A<size1>> b1;但是如果我 multiply A<sizeX>,這將創建多個物件,這是我不想要的,因為此代碼用于具有有限資源的嵌入式專案。
我想要的只是將data1物件的指標傳遞給另一個類函式并將其存盤在里面。我正在尋找的代碼是C 03,我不能使用C 11共享指標等功能。
有沒有辦法做到這一點?
感謝任何幫助,
uj5u.com熱心網友回復:
你已經讓自己陷入了一個 22 條問題的境地。
如果不進行模板化,您就不能在其中保存模板化, 例如:ABB
template <int size>
class A {
public:
int a[size];
int getA(int n) {
return a[n];
}
};
template <int size>
class B {
public:
A<size>* b;
int getA(int n) {
return b->getA(n);
}
void setB(A<size>* n) {
b = n;
}
};
int main()
{
const int size1 = 10;
A<size1> data1;
B<size1> b1;
b1.setB(&data1);
int a = b1.getA(0);
}
或者通過提供A一個非模板基類B來保存,例如:
class A_base
{
virtual ~A_base() {}
virtual int getA(int n) = 0;
};
template <int size>
class A : public A_base {
public:
int a[size];
int getA(int n) {
return a[n];
}
};
class B {
public:
A_base* b;
int getA(int n) {
return b->getA(n);
}
void setB(A_base* n) {
b = n;
}
};
int main()
{
const int size1 = 10;
A<size1> data1;
B b1;
b1.setB(&data1);
int a = b1.getA(0);
}
否則,您將不得不B只持有一個void*指標,然后要求呼叫者提取它void*并決定將其轉換為什么,例如:
template <int size>
class A {
public:
int a[size];
int getA(int n) {
return a[n];
}
};
class B {
public:
void* b;
void* getB() {
return b;
}
void setB(void* n) {
b = n;
}
};
int main()
{
const int size1 = 10;
A<size1> data1;
B b1;
b1.setB(&data1);
int a = static_cast< A<size1>* >(b1.getB())->getA(0);
}
uj5u.com熱心網友回復:
我認為您將希望從建構式傳遞大小。模板不適合此用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438904.html
