gpt4 book ai didi

C++ 将内部枚举用于类模板

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:56 26 4
gpt4 key购买 nike

template <Type T>
class Socket {
public:
enum class Type {
TCP,
UDP
};
...
}

如何使用枚举 Type 作为类模板?我想将它用作 Socket::Type::UDP 等。我尝试在 Socket 之前声明 enum class Socket::Type 但它不起作用。

最佳答案

每个Socket<...>有一个不同的Type枚举。除了单独的枚举类型之外,不可能使用 Socket::Type 的原因之一。是Socket的特化吗?甚至无法包含枚举,或生成 Type枚举以外的东西。

您有两个主要选择:

  1. 使用一个单独的类/命名空间命名紧密:

    class Sockets {
    public:
    enum class Type { ... };
    };

    template<Sockets::Type T>
    class Socket { ... };

    Socket<Sockets::Type::TCP> s;
  2. 使用单独的枚举类型:

    enum class SocketType { ... };

    template<SocketType T>
    class Socket { ... };

    Socket<SocketType::TCP> s;

或者,不要模板 Socket .你肯定会得到一堆 if (T == TCP) { ... } else { ... } .完全分离公共(public)部分并为 TCP 和 UDP 使用两种不同的实现可能会更好。

关于C++ 将内部枚举用于类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745380/

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