Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2

Аргумент разных типов для одной функции (без перегрузки)

31.03.2017, 10:47. Показов 2771. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День всем добрый!

Я тут решил немного облегчить себе жизнь.

У меня есть функция:

C++
1
2
3
4
5
6
7
void CombineWCHAR(WCHAR wchar_main[256], WCHAR wchar_0[256], WCHAR wchar_1[256] = L"", WCHAR wchar_2[256] = L"", WCHAR wchar_3[256] = L"", WCHAR wchar_4[256] = L"") {
    wcscat(wchar_main, wchar_0);
    wcscat(wchar_main, wchar_1);
    wcscat(wchar_main, wchar_2);
    wcscat(wchar_main, wchar_3);
    wcscat(wchar_main, wchar_4);
}
Как вы, наверное, поняли, она объединяет до шести строк типа WCHAR. Чтобы несколько функций много раз не писать, подключил заголовок с такой функцией.

Теперь я хочу апгрейдить эту функцию таким образом:

Я записываю первый аргумент типа WCHAR, а остальные аргументы типа char. Или, к примеру, третий и пятый аргументы char, а остальные WCHAR.

Как можно реализовать возможность введения аргумента нескольких разных типов? Чтобы потом проверять, какого типа агрумент и уже дальше либо перекодровать его и клеить, либо просто клеить.

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

Добавлено через 10 минут
И ещё один вопрос: можно ли задефайнить всё так, чтобы, к примеру, если я написал:

C++
1
2
3
WCHAR a;
WCHAR b;
WCHAR c = a + b;
Это посчиталось компилятором как:

C++
1
2
wcscat(c, a);
wcscat(c, b);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2017, 10:47
Ответы с готовыми решениями:

Используя механизм перегрузки функции, вычислить для разных типов параметров
Используя механизм перегрузки функции, разработать и отладить программу вычисление значения = f (x, y, z) для различных типов параметров....

Параметр и аргумент функции разных типов, но код работает
#include <iostream> #include <fstream> using namespace std; class dist { private: int feet; float inch; ...

Создание шаблонной функции для работы с массивами разных типов данных
Здравствуйте. Столкнулся со следующей проблемой: не могу написать шаблонную функцию подсчета суммы элементов в массиве между первым и...

4
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
31.03.2017, 10:51
mkostoevr, используйте std::string/std::wstring
0
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
31.03.2017, 10:57  [ТС]
Max Dark, есть некоторые функции, в которых переменные типа STRING и WSTRING неприменимы.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
31.03.2017, 11:05
Лучший ответ Сообщение было отмечено mkostoevr как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//g++  5.4.0
 
#include <iostream>
 
template<typename Tp, typename ... Args>
void concatenateAll(Tp & tp, Args &&... args)
{
    using dummy = int[];
    
    (void)dummy{ (wcscat(tp, args), 0)... };
}
 
int main()
{
    wchar_t arr[256]{};
    concatenateAll(arr, L"qwe", L"zxc", L"ololo");
    
    std::wcout << arr;
}
2
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
31.03.2017, 11:06
Лучший ответ Сообщение было отмечено mkostoevr как решение

Решение

Цитата Сообщение от mkostoevr Посмотреть сообщение
типа STRING и WSTRING неприменимы.
Для таких функций есть std::string::c_str()
C++
1
2
3
4
5
6
7
8
9
10
#include <string>
#include <cstdio>
 
int main() {
    std::string  s1 = "std::string s1";
    
    fputs (s1.c_str(), stdout);
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2017, 11:06
Помогаю со студенческими работами здесь

реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек
Задача: реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек Для списка: ...

Использования одной функции для разных форм
Есть 3 формы и один класс. В классе функция, которая проделывает определенные действия на форме. Как можно модифицировать функцию, чтобы...

Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных: float, int, double
Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных float, int, double, long: приведение типов.

Как в одной программе подключить web камеры разных типов?
Есть 2 камеры usb и примерно 10-ть web камер по городу (URL) с нета, их все соединить в одной программе. Подскажите или посоветуйте,...

Табулирование заданной функции одной переменной для разных исходных данных
Табулирование заданной функции одной переменной для разных исходных данных(начальное значение аргумента,число точек,шаг изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru