gpt4 book ai didi

c++ - 模板: class specialization

转载 作者:行者123 更新时间:2023-12-02 08:08:38 25 4
gpt4 key购买 nike

我是 C++ 世界的新手。抱歉我的菜鸟问题。

我有课

template <typename T>
class Foo
{
T t_;
void say_hello()
{ std::cout << "Ciao";}
// work with T ...
};

我想将此模板类专门用于 3 种类型。

如果类型是(ABC),则使用此类

template<>
class Foo<A or B or C>
{
void say_hello()
{ std::cout << "Hello";}
};

最好的方法是什么?感谢您的帮助。

最佳答案

可能的解决方案使用 SFINAE

template <typename T, typename = void>
class Foo
{
T t_;
void say_hello()
{ std::cout << "Ciao";}
// work with T ...
};

template <typename T>
class Foo<T, std::enable_if_t<std::is_same_v<T, A>,
|| std::is_same_v<T, B>,
|| std::is_same_v<T, C>>
{
void say_hello()
{ std::cout << "Hello";}
};

如果您不在 Foo 特化中使用 T (如您的示例中所示),您还可以使用某种自继承

template <typename T>
class Foo
{
T t_;
void say_hello()
{ std::cout << "Ciao";}
// work with T ...
};

template <>
class Foo<A>
{
void say_hello()
{ std::cout << "Hello";}
};

template <>
class Foo<B> : public Foo<A>
{ };

template <>
class Foo<C> : public Foo<A>
{ };

偏离主题:如果您想在类外使用 say_hello(),最好将其设置为 public (或者声明 Foo code> 作为 struct)。

关于c++ - 模板: class specialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60761672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com