小编Zel*_*lta的帖子

为什么std :: optional :: operator =(U &&)要求U是非标量类型?

对于可选项template<class U = T> optional<T>& operator=(U&& v);,标准要求(参见[optional.assign] /3.16):

除非... conjunction_v<is_scalar<T>, is_same<T, decay_t<U>>>false ... 否则此函数不应参与重载决策 .

为什么在分配类型标量时我们必须排除大小写U == T

c++ optional language-lawyer c++17

15
推荐指数
1
解决办法
479
查看次数

抑制pycharm和pylint的警告

我使用PyCharm编写代码,我也配置CI服务器在每个PR上运行PyLint.问题是PyCharm和PyLint使用不同的注释来抑制警告:

# noinspection PyMethodMayBeStatic
# pylint: disable=no-self-use
Run Code Online (Sandbox Code Playgroud)

我不喜欢对PyCharm和PyLint都有两条评论.有没有办法配置PyLint来理解PyCharm注释或配置PyCharm来理解PyLint注释?

pylint pycharm

13
推荐指数
1
解决办法
1498
查看次数

实现Stream <T>,可以将其转换为Stream <U>,其中U是T的基础

我正在尝试实现对象的通用输入流.也就是说,实现的接口或轻量级代理.实现的细节是未知的,即我的库的用户可以编写自己的例如protobuf消息流,将其传递给我的库并返回,例如,字符串流或任何其他流.我想保持流通用的接口,以便用户可以编写自己的转换并构建转换管道.

流的接口应如下所示:

template <typename T>
class Stream {
public:
    T* input();
}
Run Code Online (Sandbox Code Playgroud)

在每次调用时,input()如果流为空,则应返回流中的下一个对象或空指针.

问题是,我想Stream<T>是转换为Stream<U>,如果T*是转换为U*.

我不成功的尝试是使用指针实现如下:

class StreamImplBase {
public:
    virtual void* input_raw() = 0;
}

template <typename T>
class StreamImpl: public StreamImplBase {
public:
    void* input_raw() final { return input(); }
    virtual T* input() = 0;
}

template <typename T>
class Stream {
    StreamImplBase* impl;
public:
    Stream(StreamImpl<T>* impl): impl(impl) {}
    T* input() { return static_cast<T*>(impl->input_raw()); }
}
Run Code Online (Sandbox Code Playgroud)

从构造StreamImpl<T>保证了 …

c++ pointers casting

5
推荐指数
1
解决办法
164
查看次数

标签 统计

c++ ×2

c++17 ×1

casting ×1

language-lawyer ×1

optional ×1

pointers ×1

pycharm ×1

pylint ×1