Из-за специфического процесса ввода-вывода в ibm i существует требование использования полей ввода-вывода для файла ввода-вывода.
Как показано ниже, нам нужно скомпилировать временные структуры для отображения значений файла.
После просмотра constexpr
я решил попробовать какое-то решение cpp + templates из здесь .
Окончательный код для моего случая выглядит так:
MYSRC / MYMOD.CPP
#include "MYSRC/MODINCH"
template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
// Provide a function template to deduce N ^ right here
return constexpr_string<N>(a);
// ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
return 0;
}
MYSRC / MODINCH.H
#include <algorithm>
#define __IBMCPP_TR1__ 1
#include <QSYSINC/STD(array)>
using std::size_t;
template <size_t N> // N is the capacity of my string.
class constexpr_string {
private:
//std::tr1::array<char, N> data_; // Reserve N chars to store anything.
char data_[N];
std::size_t size_; // The actual size of the string.
public:
constexpr constexpr_string(const char(&a)[N]): data_{}, size_(N - 1)
{
for (std::size_t i = 0; i < N; ++i) {
data_[i] = a[i];
}
}
constexpr iterator begin() { return data_; } // Points at the beggining of the storage.
constexpr iterator end() { return data_ + size_; } // Points at the end of the stored string.
};
Код выше компилируется с
CRTCPPMOD MODULE(QTEMP/MYMOD) SRCFILE(MYLIB/MYSRC) SRCMBR(MYMOD)
OPTIMIZE(40) DBGVIEW(*ALL) LANGLVL(*EXTENDED0X)
для char data_[N];
и std::tr1::array<char, N> data_;
Однако, когда я пытаюсь заполнить экземпляр constexpr_string
следующим образом:
#include "MYSRC/MODINCH"
template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
// Provide a function template to deduce N ^ right here
return constexpr_string<N>(a);
// ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
auto test1 = make_constexpr_string("blabla");
constexpr_string<7> test("blabla");
return 0;
}
ошибка мгновенно завершается компиляцией с этим сообщением
CZP0063(30) The text "constexpr_string" is unexpected.
прямо на линии ctor. Для меня это выглядит как компилятор не может определить ключевое слово constexpr
в этой ситуации, но почему?
Я что-то напутал в коде или это использование в настоящее время не поддерживается?
Здесь - это поддерживаемые функции компилятора ibm, а IBM XLC ++ поддерживает constexpr
, насколько я могу вычесть из данной таблицы.