char* insert_char(char* str, uint_t pos, char ch)
{
uint_t len = strlen(str);
char* new_str = new char[len+1];
if (pos != 0)
memcpy(new_str, str, pos * sizeof(char));
new_str[pos] = ch;
if (pos != len)
memcpy(&(new_str[pos+1]), &str[pos], (len - pos) * sizeof(char));
return new_str;
}
#if !defined(__MAIN_H_INCLUDED__) // Это чтобы файл не парсился несколько раз
// при компиляции одного cpp-файла
#define __MAIN_H_INCLUDED__
int main(); // Форвард-определения функций
extern int x; // Внешние определения переменных
const int y = 0; // Константы
template <class _T> // Шаблоны классов и функций содержат тела функций
class ClassT {
public:
ClassT()
{ }
};
inline int get_x() { // Инлайновые функции тоже тело находится в заголовке
return x;
}
#endif // __MAIN_H_INCLUDED__
QString h(ui->lineEdit->text().toStdString().c_str());
ui->label_3->setText(h);
class IObject
{
public:
virtual void create(void** ret_val) = 0;
virtual std::string name() const = 0;
};
template <typename _Type>
class ObjectT : public IObject
{
protected:
static std::string m_name;
public:
void create(void** ret_val)
{
*ret_val = (void*) new _Type;
}
};
typedef ObjectT<bool> BoolObject;
typedef ObjectT<int> IntObject;
template<> std::string BoolObject::m_name = "bool";
template<> std::string IntObject::m_name = "int";
BoolObject bobj;
IntObject iobj;
std::vector<IObject*> my_vector;
my_vector.push_back (&bobj);
my_vector.push_back (&iobj);
if (my_vector[n].name() == "bool") {
bool* pval = nullptr;
my_vector[n].create((void**) &pval);
*pval = true;
}