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) 嗨,
我有以下代码......
// 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)
谢谢您的帮助.
码:
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)
问题出在哪儿?