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

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

31.03.2017, 10:47. Просмотров 1162. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2017, 10:47
Ответы с готовыми решениями:

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

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

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

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

4
шКодер самоучка
2124 / 1843 / 899
Регистрация: 09.10.2013
Сообщений: 4,028
Записей в блоге: 7
31.03.2017, 10:51 2
mkostoevr, используйте std::string/std::wstring
0
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
31.03.2017, 10:57  [ТС] 3
Max Dark, есть некоторые функции, в которых переменные типа STRING и WSTRING неприменимы.
0
Любитель чаепитий
3526 / 1638 / 506
Регистрация: 24.08.2014
Сообщений: 5,575
Записей в блоге: 1
31.03.2017, 11:05 4
Лучший ответ Сообщение было отмечено 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
шКодер самоучка
2124 / 1843 / 899
Регистрация: 09.10.2013
Сообщений: 4,028
Записей в блоге: 7
31.03.2017, 11:06 5
Лучший ответ Сообщение было отмечено 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2017, 11:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.