Не все экземпляры типа могут быть скопированы в другой экземпляр того же типа с знаком =
.Какой интерфейс будет копировать cstrings, массивы и другие типы в экземпляры одного типа?
Например, хотя он может работать на Интс:
int x = 0;
int y = 5;
x = y; //x is now: 5
Это не будет работать на массивы символов:
char x[32]="data to overwrite";
char y[32]="new data";
x = y; //incorrect
или других массивов:
int x[5] = {1,2,3,4,5};
int y[5] = {6,7,8,9,10};
x = y; //incorrect
или символ * s:
char* x="data to overwrite";
char* y="new data";
x = y; //incorrect
Как я могу написать перегруженную функцию, которая позволит мне сделать следующее?
int x = 0;
int y = 5;
Copy(x,y); //x is now: 5
char x[32]="data to overwrite";
char y[32]="new data";
Copy(x,y); //x is now: "new data"
int x[5] = {1,2,3,4,5};
int y[5] = {6,7,8,9,10};
Copy(x,y); //x is now: {6,7,8,9,10}
char* x="data to overwrite";
char* y="new data";
Copy(x,y); //x is now: "new data"
* Я буду считать, что любые абстрактные типы данных сделать необходимую работу в их перегруженный оператор присваивания (или из мелкой копии, предоставленной компилятором)
Почему вам нужно сделай это?
Чтобы упростить проверку частей устаревшей базы кода C, я хотел бы сгенерировать некоторые обертки C++ вокруг нескольких компонентов. Из-за странного дизайна кода С, существует много косвенности, от которой я хотел бы избавиться. Таким образом, было бы намного проще копировать переменные в другой экземпляр, используя простую функцию Copy
вместо того, чтобы разбирать типы и решать, как сделать соответствующую копию в другой переменной экземпляра.
.... Dont? Используйте 'std :: string' и' std :: vector', тогда вы можете просто сделать 'x = y' ... –
Почему вы считаете, что назначение указателя (' char * ') было бы неправильным? Это работает отлично. И что пытаются решить? – DarkDust
@Ben Я взаимодействую с устаревшим кодом C. –