#include <iostream>
#include <functional>
class Form {
};
class Form1 : public Form {
public:
void click() const {
std::cout << "Form1::click" << std::endl;
}
};
typedef std::function<void(const Form1*)> ClickEvent;
class Button {
public:
ClickEvent onClick;
Form1 *owner;
Button(Form1 *owner) {
this->owner = owner;
}
void click() {
if (onClick != NULL) onClick(owner);
}
};
int main()
{
Form1 *a = new Form1();
Button btn(a);
btn.onClick = std::mem_fn(&Form1::click);
btn.click();
}
// создаем новый итем (пусть сначала базовый)
QTreeWidgetItem *topLevelItem=new QTreeWidgetItem(ui->treeWidget);
// вешаем его на наше дерево в качестве топ узла.
ui->treeWidget->addTopLevelItem(topLevelItem);
// укажем текст итема
topLevelItem->setText(0,"Итем");
// создаем новый итем и сразу вешаем его на наш базовый
QTreeWidgetItem *item=new QTreeWidgetItem(topLevelItem);
// укажем текст итема
item->setText(0,"Под итем");
string path = "param1/param2/name1=value1&name2=value2";
pos = 0;
int posEnd = path.length();
int mode = 1;
int index = 1;
string name = "", value = "";
while (true) {
if (pos >= posEnd || path[pos] == '/' || path[pos] == '&') {
if (mode == 1) {
if (name != "") {
value = name;
name = "p" + to_string(index);
index++;
params.insert(name, value);
name = "";
value = "";
}
}
else {
params.insert(name, value);
name = "";
value = "";
mode = 1;
}
if (pos >= posEnd) break;
}
else if (path[pos] == '=') {
mode = 2;
}
else {
if (mode == 1) name += path[pos]; else value += path[pos];
}
pos++;
}
1.) Проект про которой идет речь, является веб-платформой, написанной на C++11 (+ Boost), подключаемая к веб-серверу через FastCGI.
3.) Контроллеры привязанные предлагается писать на скриптовом языке (не трогая C++, компилируя там и т.д.), например на LUA
5.) Шаблоны на DTL (Django Template Language)