2012-04-16 2 views
2

Я занимаюсь двумя вещами. Сначала я хочу напечатать класс vector для чего-то более значимого, такого как List. Я попытался следующие, но он дал мне ошибку компиляции:Операторы переопределения для существующего класса

template <typename T> 
typedef vector<T> List<T> 

Во-вторых, я хочу, чтобы переопределить << оператор vector класса, но я понятия не имею, как бы я идти об этом без создания нового класса.

Это может показаться контрпродуктивным, но моя цель заключается в том, чтобы что-то, что не читали программисты (или люди, которые еще не делали C++ раньше), воспринимает семантический смысл.

+2

Это контрпродуктивно. Все об этом. –

+0

Как программист, да, его контрпродуктивный ... но для достижения моей конечной цели это НЕКОТОЧНО. – Cheetah

+0

Почему программисты не читают ваш код? Если они программисты, которые не изучили C++, лучше изучать C++, чем скрывать от них работу языка. –

ответ

3

В C++ нет шаблона typedef s, но вы можете использовать using вместо этого в C++ 11.

template<class T> 
using List = std::vector<T>; 
// ... 
List<int> foo; // aka std::vector<int> foo; 

перегрузка оператора может быть сделано без изменения класса.

template<class T> 
std::vector<T>& operator<<(std::vector<T>& vec, const T& value) { 
    vec.push_back(value); // or whatever you want to do. 
    return vec; 
} 

Просто поместите его где-то и он должен работать, даже за пределами определения класса из std::vector.

+2

Перегрузка 'operator <<()' для добавления к вектору нарушает [основные правила перегрузки оператора] (http://stackoverflow.com/a/4421708/140719): ___ 1) ___ Всякий раз, когда смысл оператора не очевидно ясный и бесспорный, он не должен быть перегружен. ___ 2) ___ Всегда придерживайтесь известной семантики оператора. – sbi

+0

@sbi Я полностью согласен, но это то, о чем попросил ОП. Вы можете добавить эту заметку к ответу, если хотите. –

+0

Я уже _did_ добавлю ответ на этот вопрос. ':)' (Я не спустил вниз, но я не мог допустить этого, не указав, что это будет вредно в долгосрочной перспективе.) – sbi

5

Если вы сделаете это, не-программисты все равно не смогут прочитать, не говоря уже об изменении кода. Тем не менее, программистам на C++ также будет очень сложно читать код.

Если они не могут запрограммировать код и ему нужен программист на C++, чтобы запрограммировать его для них, тогда им понадобится программист на C++, чтобы понимать, поддерживать и расширять код, который написал этот первый программист на C++.

Если, OTOH, им нужно закодировать на C++, то - сюрприз! - им придется научиться писать и читать код на C++.

Между ними действительно ничего не происходит.

+0

Чтобы добавить к этому, 'List' и' Vector' одинаково бессмысленны для тех, кто понятия не имеет о программировании. Как говорит Sbi, им либо нужно научиться программировать на C++, либо им нужно получить кого-то, кто знает, как это сделать. Вам также нужно учитывать, что происходит, когда кто-то начинает проникать в это программирование и задается вопросом, почему их код настолько запутан. Просто научите их правильно с самого начала. – thecoshman

+0

Совсем наоборот. Моя аудитория полностью поняла код C++, когда я использовал regex для изменения вектора в List. У меня были не-программисты, которые делали правильные предложения во время демонстрации в прямом эфире. Они никогда не «кодируют» как таковые, они просто говорят мне, какие переменные меняться, какие переменные необходимо добавить в список и т. Д. ... так что нет, на самом деле им не нужно учиться писать C++. Код только там, чтобы они могли: a) увидеть полный алгоритм происходящего и b) если программисты захотят внести существенные изменения, у них есть код для этого. – Cheetah

Смежные вопросы