c++17 如何使用非类型模板创建模板实例
c++17 how to create a template instance with a non-type template
我想创建一个具有不同部分的主体,如果我知道该部分的名称,我可以使用 factory.Just 创建相应的实例,如下所示:
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
{
return make_unique<Body<Part2>>();
}
}
};
int main()
{
auto f=Factory<E::part1>();
return 0;
}
肯定是在编译时失败了,那我怎么弄到我的海豚呢?
此处没有包含 non-type 模板参数的任何内容,因此您的标题令人困惑。
我假设你抱怨的是编译器错误
Body<>
嗯,这是一个错误。 Body 不是类型,而是模板。它需要一个参数并且没有默认值。
代码希望它是一个 Body<Part1>
或 一个 Body<Part2>
但没有任何东西的 "Body “正如你暗示的那样。
您可以使用 variant
来拥有包含任一类型的类型。例如,
using BodyPart = std::variant<Body<Part1>,Body<Part2>>;
但您必须学习如何使用该值(最好是对访问者),因为它既不同于多态类型,也不同于泛型(编译时)模板。
我想创建一个具有不同部分的主体,如果我知道该部分的名称,我可以使用 factory.Just 创建相应的实例,如下所示:
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
{
return make_unique<Body<Part2>>();
}
}
};
int main()
{
auto f=Factory<E::part1>();
return 0;
}
肯定是在编译时失败了,那我怎么弄到我的海豚呢?
此处没有包含 non-type 模板参数的任何内容,因此您的标题令人困惑。
我假设你抱怨的是编译器错误
Body<>
嗯,这是一个错误。 Body 不是类型,而是模板。它需要一个参数并且没有默认值。
代码希望它是一个 Body<Part1>
或 一个 Body<Part2>
但没有任何东西的 "Body “正如你暗示的那样。
您可以使用 variant
来拥有包含任一类型的类型。例如,
using BodyPart = std::variant<Body<Part1>,Body<Part2>>;
但您必须学习如何使用该值(最好是对访问者),因为它既不同于多态类型,也不同于泛型(编译时)模板。