Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615

Слияние строк времени компиляции

25.10.2017, 14:22. Показов 1579. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть строки времени компиляции:

C++
1
2
constexpr const char *str1 = "QWERTY";
constexpr const char *str2 = "q1w2";
Необходимо на этапе компиляции выполнить их слияние:

C++
1
constexpr const char *result = str1 + str2; // Итог: QWERTYq1w2
Как это сделать?

В интернете предлагается использовать класс-обертку вида:

C++
1
2
3
4
5
template<int N>
class ConstString
{
    //...
}
Мне это совершенно не удобно, т.к. всюду придется таскать неизвестное "int N" в сигнатурах функций и параметрах шаблонов.
Например было бы хорошо иметь такую функцию:

C++
1
2
3
4
constexpr const char* concat(const char *str1, const char *str2)
{
    // ...
}
и делать это:

C++
1
2
3
4
5
6
7
constexpr const char* result = concat("ABCD", "q2Sef333"); // #1
 
constexpr const char *str = "QWERTY";
constexpr const char* result = concat(str, "hello"); // #2
 
constexpr const char str[] = "QWERTY";
constexpr const char* result = concat(str, "hello"); // #3
Возможно ли такие или аналогичное?
Пусть будет класс для строки, главное чтобы без шаблонных параметров. Версия C++11/C++14.

Добавлено через 17 часов 45 минут
Никто ничего не знает?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2017, 14:22
Ответы с готовыми решениями:

Полиморфизм времени выполнения/времени компиляции
Здравствуйте, подскажите, пожалуйста, литературу, где мне внятно можно узнать что такое полиморфизм ВРЕМЕНИ ВЫПОЛНЕНИЯ и ВРЕМЕНИ...

Слияние строк
Разработать программу для упрощения работы с путем (Path) к файлу в файловой системе. Привязку к реальному диску делать необязательно....

Слияние двух строк
Как соединить (конкатенировать) две строки на С? Помогите, пожалуйста

3
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.10.2017, 14:44
Compile-time алгоритмы. сборник

Добавлено через 4 минуты
Цитата Сообщение от [progeR] Посмотреть сообщение
главное чтобы без шаблонных параметров
А вот так, боюсь, не выйдет.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.10.2017, 19:24
Цитата Сообщение от [progeR] Посмотреть сообщение
и делать это:
Прямо вот как у тебя не получится, но можно сделать кое-что наподобие:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
template <typename CharT, CharT ...Chars>
struct ct_string
{
    static constexpr char const value[] = { Chars..., 0 };
};
 
template <typename CharT, CharT ...Chars>
constexpr char const ct_string<CharT, Chars...>::value[];
 
template <typename CharType, CharType... Chars>  // <<========= :-)
constexpr auto operator"" _S() 
{
    return ct_string<CharType, Chars...>();
}
 
template<typename CharType, CharType... LeftChars, CharType... RightChars>
constexpr auto operator+(const ct_string<CharType, LeftChars...> &, const ct_string<CharType, RightChars...> &)
{
    return ct_string<CharType, LeftChars..., RightChars...>();
}
 
int main()
{
    constexpr auto result1 = "ABCD"_S + "q2Sef333"_S; // #1
    
    std::cout << result1.value << '\n';
 
    constexpr auto str = "QWERTY"_S;
    constexpr auto result2 = str + "hello"_S; // #2
 
    std::cout << result2.value << '\n';
}
http://rextester.com/DDWW43891

Внимание, в коде используется нестандартное расширение компиляторов gnu (отмечено смайликом): является реализацией этого предложения.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
25.10.2017, 19:35
Цитата Сообщение от [progeR] Посмотреть сообщение
Как это сделать?
Элементарно.
C++
1
2
3
4
5
6
7
8
#define str1 "1234"
#define str2 "5678"
#define str3 str1 str2
int main()
{
    cout<<str3<<endl;
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2017, 19:35
Помогаю со студенческими работами здесь

Преобразование int в string и слияние строк
int KeysOfFile+=1; string KeysOfFileS=KeysOfFile; string newNameOfBook=&quot;book&quot;; string ...

Слияние двух строк с перестановкой символов
Необходимо произвести слияние 2х строк, вводимых в консоль и вывод третьей строки, объединяющей в себе первую и вторую строку, НО, в...

Перегрузка операторов и слияние строк типа char*
Доброго времени суток! Есть класс, для объектов которого перегружен оператор +. Класс представляет собой массив строк типа char*. ...

Измерение времени компиляции
как узнать время компиляции исходного текста и размер памяти, которую програма использует

Динамический двумерный массив строк и операции со строками (поиск, обрезка, слияние)
Создать динамический двумерный массив на 10 ячеек (для десяти строк). Заполнить его строчками текста, принятыми с клавиатуры. ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru