相关疑难解决方法(0)

使用C++ 11复制和移动时避免代码重复

C++ 11"移动"是一个很好的功能,但我发现当与"复制"同时使用时,很难避免代码重复(我们都讨厌这个).下面的代码是我实现的一个简单的循环队列(不完整),两个push()方法几乎相同,除了一行.

我遇到过很多像这样的情况.任何想法如何避免这种代码重复而不使用宏?

===编辑===

在这个特定的例子中,重复的代码可以被重构并放入一个单独的函数中,但有时这种重构是不可用的或者不能轻易实现.

#include <cstdlib>
#include <utility>

template<typename T>
class CircularQueue {
public:
    CircularQueue(long size = 32) : size{size} {
        buffer = std::malloc(sizeof(T) * size);
    }

    ~CircularQueue();

    bool full() const {
        return counter.in - counter.out >= size;
    }

    bool empty() const {
        return counter.in == counter.out;
    }

    void push(T&& data) {
        if (full()) {
            throw Invalid{};
        }
        long offset = counter.in % size;
        new (buffer + offset) T{std::forward<T>(data)};
        ++counter.in;
    }

    void push(const T& data) {
        if (full()) { …
Run Code Online (Sandbox Code Playgroud)

c++ code-duplication move-semantics c++11

23
推荐指数
1
解决办法
1974
查看次数

C++全局重载operator =

可能重复:
"operator =必须是非静态成员"是什么意思?(C++)

嗨,

我有以下代码......

// Header file
  struct dataRecord{
     size_t id;
     char name[gcNameLength];
  };

  void operator=(dataRecord &adr, const dataRecord &bdr);
Run Code Online (Sandbox Code Playgroud)

gcc在编译时如何给我以下错误.

error: ‘void operator=(dataRecord&, const dataRecord&)’ must be a nonstatic member function
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

c++ overloading operators

2
推荐指数
1
解决办法
5280
查看次数

Operatrator []作为非静态函数

码:

SchedulingItem operator[](Schedule obj,int el){
    return obj.OfVector().at(el);
}
Run Code Online (Sandbox Code Playgroud)

错误:

academia::SchedulingItem academia::operator[](academia::Schedule, int)' must be a nonstatic member function
     SchedulingItem operator[](Schedule obj,int el)

问题出在哪儿?

c++ operator-overloading

0
推荐指数
1
解决办法
67
查看次数