Можно ли объявлять классы внутри функций? А передавать созданные таким образом объекты в другие функции? Например, данный код выполняется, как задумано:
#include <iostream>
template <typename T>
void foo (T x)
{
std::cout << x.a;
}
int main() {
struct X {
int a = 3;
} x;
foo(x);
}
В аналогичном вопросе на англоязычном StackOverflow отвечают, что объявлять локальные классы и структуры можно. Однако до C++11 их было нельзя использовать в качестве параметров шаблонов, зато можно, например, для реализации фабрики (пример из этого ответа, корректен в C++03):
// В .h
class Base
{
public:
virtual ~Base() {}
virtual void DoStuff() = 0;
};
Base* CreateBase( const Param& );
// В .cpp
Base* CreateBase( const Params& p )
{
struct Impl: Base
{
virtual void DoStuff() { ... }
};
...
return new Impl;
}
Начиная с C++11 их можно использовать в том числе как параметры шаблонов, то есть с C++11 ваш пример тоже корректен.
Даже не знаю, по-человечески это, или нет...
Такой код компилируется и работает справно
#include <iostream>
template <typename T>
void foo2 (T x)
{
std::cout << x.a;
}
template <typename T>
void foo (T x)
{
std::cout << x.a;
class m{
public:
int a = 2; // объявляем класс внутри функции
} g;
foo2(g); // передаем этот объект в другую функцию foo2()
}
int main(int argc, const char * argv[])
{
class X{
public:
int a = 3;
} x;
foo(x);
return 0;
}
Выводит 3 2
Но мне кажется, что так делать не корректно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день! Никак не удаётся написать или найти программу, которая позволяла бы выводить на экран версию BIOS текущего компьютераНужен код...
Доброго дняПо заданию требуется записать в бинарник несколько массивов структур
Здравствуйте, я сделал запись в файл с одного класса, но нужно дописать в этот же файл результаты из второго класса, результаты накладываются...