gpt4 book ai didi

c++ - 模板元编程 NamedPipe 客户端服务器

转载 作者:行者123 更新时间:2023-11-30 02:03:13 25 4
gpt4 key购买 nike

我正在为 C++11 编写 NamedPipe 提取,并希望拥有以下 API*:

template<typename Mode>
class NamedPipe final {
public:
void Open();

std::enable_if<Mode == Receiver>
void Send();

std::enable_if<Mode == Receiver>
void Receive();

void Close();
}

所以使用看起来像这样:

NamedPipe<Sender> pipe_sender("test");
NamedPipe<Reciever> pipe_receiver("test");
pipe_sender.Open();
pipe_receiver.Open();
pipe_sender.Send("Some data");
pipe_receiver.Receive();
pipe_sender.Receive(); <--- compilation error

我一直在使用 C++11 中的 type_traits,但只是真正开始使用它们——我真的很喜欢使用它们,但这确实在弯曲学习曲线。有没有人有足够的知识为我指明正确的方向?

* 第一个例子是故意粗略的,因为我一直在绕着模板的东西转圈——我真的只需要走上正确的道路!

最佳答案

您可以使用静态断言轻松强制编译错误:

template<typename Mode>
class NamedPipe final {
public:
void Open();
void Send();
void Receive();
void Close();
}
template<typename Mode>
void NamedPipe<Mode>::Send() {
static_assert(std::is_same<Mode, Sender>::value, "Cannot send from receivers");
// blah blah implementation
}
template<typename Mode>
void NamedPipe<Mode>::Receive() {
static_assert(std::is_same<Mode, Receiver>::value, "Cannot receive with senders");
// blah blah implementation
}

这不仅会产生编译错误,还会产生很好的描述性错误。

关于c++ - 模板元编程 NamedPipe 客户端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252094/

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