![](/img/trans.png)
[英]C++ templating, passing a function pointer with a parameterized return type
[英]C++ templating syntax - allocate type with pointer
我該如何進行內存分配:
template <class T>
class A
{
T Generate()
{
return new T(); // Error
}
};
A<B *> a;
B * pI = A.Generate();
或者您只能將以下內容定義為:
A<B> a;
如果我對您的理解正確,則希望對指針類型使用A的特殊化。 嘗試類似:
#include <cstdio>
template <class T>
class A
{
public:
T *Generate()
{
printf("A\n");
return new T; // Error
}
};
template <class T>
class A<T*> {
public:
T *Generate() {
printf("Specialization of A\n");
return new T;
}
};
class B {
};
int main() {
A<B *> a;
B * pI = a.Generate();
}
編輯:
要“替代”功能的僅一部分:
template <class T>
class Generator
{
public:
T *Generate()
{
printf("Generator\n");
return new T; // Error
}
};
template <class T>
class Generator<T*> {
public:
T *Generate() {
printf("Specialization of Generator\n");
return new T;
}
};
template <class T>
class A: public Generator<T>
{
public:
// does some other stuff
};
您的代碼有很多問題:
A.Generate()
應該是a.Generate()
因為Generate
是成員函數。
new T()
返回T*
,因此您的Generate
函數應類似於:
T* Generate()
{
return new T();
}
這也應反映在您的用法中:
A<B *> a;
B ** pI = a.Generate(); //generator for B* returns B**
new
將返回一個指針,因此您需要簽名
T* Generate()
{
return new T();
}
如果您想在課程之外調用此函數,則該函數也必須是public
的。
我該如何進行內存分配
通過修復語法和語義錯誤。
Generate
返回類型為T
,但您返回T*
。 您可能想將返回類型更改為T*
。 因此,必須將返回的類型分配給T*
變量。 由於您的T
為B*
,因此該變量必須具有類型B**
。 A
沒有實例。 而是使用實例調用成員。 另外,該成員是私人的。 公開。 修復代碼后,您會看到它成功完成了內存分配。
或者您只能將以下內容定義為:
A<B> a;
不,還有更多定義方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.