Здравствуйте, niXman, Вы писали:
X>приветствую! X>есть массив a, и массив b . X>нужно, инициализировать массив c следующим образом(в псевдокоде): static const char c[] = a + '-' + b; X>сабж, вообще, возможен? X>благодарен. X>зы X>далее, переменная c будет использоваться для разбора, опять же в compile-time.
Сначала не мешало бы договориться, что мы понимаем под compile-time массивом. Как я понимаю, это такой массив, значения элементов которого также доступны в компайл-тайм. И если, к примеру, это массив int, то мы можем элементы этого массива использовать при определении элементов перечислений и параметризовать ими шаблоны? Это не возможно. В этом понимании компайл-тайм массивов не существует как таковых.
Их можно симулировать с помощью variadic темплейтов:
Здравствуйте, niXman, Вы писали:
X>есть массив a, и массив b . X>нужно, инициализировать массив c следующим образом(в псевдокоде): static const char c[] = a + '-' + b;
a и b — обычные массивы байт. хотелось бы, чтоб так оно и осталось.
просто подумал, что возможно есть какой-то способ инициализировать обычные массивы, другими массивами байт.
типа: static const char c[] = {a..., b...};
mpl::string для этого тянуть не хотелось бы.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Если a и b тоже объявлены константными, то можно инициализировать только c, а a и b сделать ссылками на подмассивы c. Хотя без reinterpret_cast у меня это не получилось:
Здравствуйте, niXman, Вы писали: X>нужно, инициализировать массив c следующим образом(в псевдокоде): static const char c[] = a + '-' + b; X>далее, переменная c будет использоваться для разбора, опять же в compile-time.
Можно, только синтаксис слегка корявый
Не совсем уверен, что код ниже не нарушает никакого спрятавшегося от меня особо коварного подпункта стандарта , но всё же;
constexpr, судя по разбору строк в compile-time, имеется.
Синтаксис будет вот такой:
// ...
// Если внести в функцию - no linkage error, как и ожидалось:char constexpr a[] = "Hello, compile";
char constexpr b[] = "time world!";
int main() {
std::cout
<< concatenateWithSplitter<'-', a, b>( a, b )
<< std::endl;
}
Либо такой:
// ... аналогичноchar constexpr a[] = "Hello, compile";
char constexpr b[] = "time world!";
int main() {
std::cout
<< ConcatenateWithSplitter<
'-',
a,
decltype( strIndexes( a ) ),
b,
decltype( strIndexes( b ) )
>::result
<< std::endl;
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Alexey F, Вы писали:
AF>>char constexpr a[] = "Hello, compile"; AF>>char constexpr b[] = "time world!";
EP>Круто, то есть значения массива могут быть compile time: EP>
Здравствуйте, niXman, Вы писали:
X>я Вам дважды ЛС писал. Вы меня игнорируете, или что?
Виноват... Расшифруй, плиз, что такое "ЛС" и куда писал: на сколько я могу видеть в своем профиле, это первое твое обращение ко мне за последний месяц.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Виноват... Расшифруй, плиз, что такое "ЛС" и куда писал: на сколько я могу видеть в своем профиле, это первое твое обращение ко мне за последний месяц.
ЛС — Личные сообщения.
я писал дважды за последние три дня. сейчас напишу еще раз, вдруг таки недоставилось..
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)