last day (15 days later) » 

10:29 AM
-1
Q: Шаблонная функция и static переменная

StaxcelromПодскажите пожалуйста, а как нужно правильно реализовать static переменную в шаблонной функции ? Ну то есть вот так, как с обычной функцией нельзя: компилятор ругается на переопределение переменной my_int: static int my_int; template <typename char_wchar_type> int my_func_shablon_1(char_wchar_t...

 
my_int в обоих примерах не используется... static переменные не делаются для .h - файлов. Само наличие такой глобальной переменной говорит о том, что делается что-то не так.
 
@user7860670, но реализация шаблонной функции возможно же только в .h файле. Поэтому и my_int мне нужна там, где реализация функции. Вот я и не пойму, как мне сделать статическую переменную для шаблонной функции.
 
А как вы делаете переменную? Формулируйте вопрос корректно. С++ язык объектно ориентированный, и там нет переменный, а есть объекты, которые создаются, а не делаются.
 
@AR Hovsepyan, объявляю статическую переменную static int my_int - вот так. Для .cpp файла же в этом проблемы бы не было.
 
Вероятно, вы хотели объявить переменную как extern. (Не забудьте объявить ее "реализацию" в какм ни будь .cpp файле.)
 
10:29 AM
В приведенном примере my_int не нужна, она там никак не используется. Приводите настоящий код.
@Chorkov Вот чего точно не стоит делать, так это фигачить extern переменные.
 
@Staxcelrom, а какая проблема при объявлении в заголовочном файле и использовании в шаблонной функции или вне ее. Опишите полностью что вам нужно и какая проблема.
 
@Chorkov, нет, именно, как static я хотел ее объявить, чтобы она была видна только " в одной функции"
@AR Hovsepyan, проблема простая - это проблема переопределения my_int.
@user7860670, ну какая разница используется они или нет. Вопрос в том, как и можно ли объявить static переменную в шаблонной функции, как если бы это была обычная функция в .cpp файле.
 
Огромная разница. Вы пишите "вот так, как с обычной функцией нельзя", а с чего решили что нельзя, кто вам запретил - неизвестно. Ну и само по себе существование такой переменной говорит о потенциальном дефекте в коде.
 
@user7860670, прошу извинить, забыл написать, естественно компилятор запрещает, так как видит переопределение переменной my_int, когда я включаю в main оба эти .h файла.
 
Это естественно, ведь в одном пространстве имен не должно быть двух сущностей с одним и тем же именем. Шаблоны вообще не при чем.
 
10:29 AM
@user7860670, шаблоны не причем, но я не могу реализацию шаблонной функции в .cpp файле написать, а только в .h файле. Когда я включаю в main() - эти два файла - происходит переопределение. Вот я и хотел бы понять, а как можно сделать, что бы работало, как в .cpp файлах ?
 
Ну а использовать разные имена для переменных - не вариант? А вообще от них следует избавиться.
 
@user7860670, вариант конечно, но не хотелось бы.
 
avp
Наверное можно сделать шаблонный класс с такой статической переменной внутри и в нем функцию, возвращающую указатель на эту переменную (для доступа к ней можно использовать макрос, аналогичный errno в /usr/include/errno.h)
 
@avp, спасибо. Вообщем я отказался от шаблонов.
 
avp
10:29 AM
@Staxcelrom И это верно. Не нужно путать ни себя, ни других необоснованно усложненным кодом (KISS-принцип)
 

last day (15 days later) »