代码:
if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {
Run Code Online (Sandbox Code Playgroud)
错误:
fs_server.cpp:264:56: error: invalid operands to binary expression ('__bind<int &, sockaddr *,
unsigned long>' and 'int')
if (bind(sockfd, (sockaddr *) &addr, sizeof(addr)) == -1) {
Run Code Online (Sandbox Code Playgroud)
这在我使用 C++11 运行此代码时有效,当我在 Linux 上使用 C++17 运行此代码时也有效。当我使用 C++17 在 Mac OS 上运行它时它不起作用。对我来说,错误似乎表明比较是在函数本身和 -1 之间进行的。我不确定为什么会发生这种情况。我是否错误地解释了某些内容?
此类中的方法使用一个索引序列,该索引序列包含覆盖整个data元组的索引序列(参数包中传递的每个参数的索引)。根据我看到的其他答案,我目前正在对我的方法进行模板化:
#include <tuple>
#include <memory>
#include <vector>
using std::tuple;
template <typename... Args>
class Foo
{
protected:
tuple<std::shared_ptr<std::vector<Args>>...> data;
private:
template<size_t...Is>
void _clear_(std::index_sequence<Is...>) {
(std::get<Is>(data)->clear(), ...);
};
public:
void clear()
{ _clear_(std::index_sequence_for<Args...>()); };
};
Run Code Online (Sandbox Code Playgroud)
不过,这看起来很混乱。我想知道是否有一种方法可以Is在类级别范围内定义(或者,更一般地说,是否有更好的方法来做到这一点)。
go DelegateWork(mr, <-mr.impl.readyWorkers, jobArgs)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,通道接收操作符是否会导致调用者或被调用的 goroutine 阻塞?