我想用不同的部分來創建一個主體,如果我知道這個部分的名稱,我就可以用工廠來創建相應的實體。就像下面這樣:
template<typename Part>。
class Body
{};
class Part1
{};
class Part2
{};
enum class E
{
part1,
part2,
};
template<E e>
class Factory
{
public:
static unique_ptr<Body<>> create()
{
if (e == E::part1)
{
return make_unique<Body<Part1>>()。
}
else[/span
{
return make_unique<Body<Part2>>()。
}
}
};
int main()
{
auto f=Factory<E::part1>()。
return 0。
}
當然,它在編譯時失敗了,所以我怎么能得到我的密碼呢?
uj5u.com熱心網友回復:
這里沒有任何非型別的模板引數,所以你的標題很混亂。
我假設你的編譯器錯誤是在抱怨
Body<>
好吧,這是個錯誤。 Body不是一個型別,而是一個模板。 它需要一個引數,而且沒有默認值。
代碼希望它是一個Body<Part1> 或者一個Body<Part2>,但是并不存在你所暗示的 "Body of anything "這樣的事情。
你可以通過使用一個變數來擁有一個持有兩種型別的型別。 例如,
using BodyPart = std::variant<Body<Part1>, Body<Part2>> 。
但是你必須學會如何有效地使用該值(最好是與訪問者一起使用),因為它與多型型別或通用(編譯時)模板不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332994.html
標籤:
上一篇:鑄造模板類實體后的虛擬函式問題
