По сути, я хочу получить указатель на константный и анонимный объект, такой как экземпляр класса, массива или структуры, который инициализирован с T {x, y, z...}
. Извините за мои плохие навыки в формулировке.
Основной код, который я пытаюсь написать, выглядит следующим образом:
//Clunky, Im sure there is an inbuilt class that can replace this, any information would be a nice addition
template<class T> class TerminatedArray {
public:
T* children;
int length;
TerminatedArray(const T* children) {
this->children = children;
length = 0;
while ((unsigned long)&children[length] != 0)
length++;
}
TerminatedArray() {
length = 0;
while ((unsigned long)&children[length] != 0)
length++;
}
const T get(int i) {
if (i < 0 || i >= length)
return 0;
return children[i];
}
};
const TerminatedArray<const int> i = (const TerminatedArray<const int>){(const int[]){1,2,3,4,5,6,0}};
class Settings {
public:
struct Option {
const char* name;
};
struct Directory {
const char* name;
TerminatedArray<const int> const children;
};
const Directory* baseDir;
const TerminatedArray<const Option>* options;
Settings(const Directory* _baseDir, const TerminatedArray<const Option> *_options);
};
//in some init method's:
Settings s = Settings(
&(const Settings::Directory){
"Clock",
(const TerminatedArray<const int>){(const int[]){1,2,0}}
},
&(const TerminatedArray<const Settings::Option>){(const Settings::Option[]){
{"testFoo"},
{"foofoo"},
0
}}
);
Код, на который я ссылаюсь, находится в самом низу, определениеs
. Мне кажется, что я могу инициализировать константный массив целых чисел, но при применении той же методики к классам, она терпит неудачу с:
error: taking address of temporary [-fpermissive]
Я даже не знаю, поддерживает ли C ++ такие вещи,Я хочу избежать необходимости иметь отдельные определения const, загрязняющие и разделяющие код, и вместо этого иметь их чистыми и анонимными.
Причина, по которой все эти определения являются константами, заключается в том, что я работаю над проектом Arduino, который требуетэффективная балансировка SRAM для Flash. И в моем распоряжении много Flash.
У меня такой вопрос. Как я могу объявить постоянный анонимный класс / структуру, используя агрегатную инициализацию?