Вы не можете использовать "шаблонное определение типа", но можно использовать класс/структуру удобства с внутренним типом:
template<typename T>
struct TypeHelper{
typedef std::vector<T,gc_allocator<T> > Vector;
};
и затем используют в Вашем коде
TypeHelper<MyType>::Vector v;
TypeHelper<MyType>::Vector::iterator it;
И что-то подобное для карты:
template<typename K,typename V>
struct MapHelper{
typedef std::map<K, V, gc_allocator<K,V> > Map;
};
РЕДАКТИРОВАНИЕ - @Vijay: Я не знаю, существует ли другое возможное обходное решение, это - то, как я сделал бы это; макрос мог бы дать Вам более компактную нотацию, но лично я не хотел бы его:
#define GCVECTOR(T) std::vector<T,gc_allocator<T> >
РЕДАКТИРОВАНИЕ - @chmike: Обратите внимание на то, что TypeHelper
решение не делает , требуют, чтобы Вы переопределили конструкторов!
Я не совсем уверен насчет контекста, потому что getpos ()
действительно может принимать метки (например, '<
и ' >
) в качестве аргументов.
Однако, чтобы попытаться понять, о чем вы, возможно, просите, есть также v
, который похож на '<
, за исключением того, что он всегда обновляется (т. Е. Пока пользователь все еще находится в визуальный режим). Это можно использовать в сочетании с .
, текущей позицией курсора, которая затем будет представлять конец визуального выделения.
Изменить: я нашел их в : help line ()
; несколько функций, включая line ()
и getpos ()
, имеют одинаковый набор возможных аргументов.
Edit: Я думаю, вы ' Возможно, он просто спрашивает, как поместить текст между двумя произвольными метками, а не построчно ... (т.е. это не относится конкретно к визуальному режиму). Я не думаю, что на самом деле есть способ. Да, это кажется довольно вопиющим упущением. Вы должны иметь возможность подделать это, найдя метки с помощью getpos ()
, получив все строки с помощью getline ()
, а затем отрубив первую и последнюю в соответствии с положением столбца (с делом в зависимости от того, многострочный он или нет). Извините, это не настоящий ответ, но вы, по крайней мере, можете обернуть его функцией и забыть об этом.
getpos ()
, получив все строки с помощью getline ()
, а затем отрубив первую и последнюю в соответствии с положением столбца (с делом в зависимости от того, многострочный он или нет). Извините, это не настоящий ответ, но вы, по крайней мере, можете обернуть его функцией и забыть об этом. Вы должны иметь возможность подделать его, найдя метки с помощью getpos ()
, получив все строки с помощью getline ()
, а затем отрубив первую и последнюю в соответствии с положением столбца (с делом в зависимости от того, многострочный он или нет). Извините, это не настоящий ответ, но вы, по крайней мере, можете обернуть его функцией и забыть об этом. Лучший способ, который я нашел, - это вставить выделение в регистр:
function! lh#visual#selection()
try
let a_save = @a
normal! gv"ay
return @a
finally
let @a = a_save
endtry
endfunction