Skip to content

Instantly share code, notes, and snippets.

@landersson
Created May 1, 2015 04:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save landersson/11ff00b40cedf5f8f60f to your computer and use it in GitHub Desktop.
Save landersson/11ff00b40cedf5f8f60f to your computer and use it in GitHub Desktop.
#include <QApplication>
#include <QThread>
#include <memory>
#include <iostream>
#define USE_UNIQUE_PTR
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
struct Signal
{
public:
Signal() : ptr(nullptr) {}
#ifdef USE_UNIQUE_PTR
std::unique_ptr<char> ptr;
#else
char *ptr;
#endif
};
class Sender : public QThread
{
Q_OBJECT
public:
void run()
{
Signal s;
#ifdef USE_UNIQUE_PTR
s.ptr = make_unique<char>();
#else
s.ptr = new char();
#endif
*s.ptr = 'A';
emit signal(s);
}
signals:
void signal(const Signal & sig);
};
class Receiver : public QObject
{
Q_OBJECT
public slots:
void signal(const Signal & sig)
{
std::cout << "Got signal: *ptr = '" << *sig.ptr << "'" << std::endl;
}
};
#include "test_move_signal.moc"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Receiver receiver;
Sender sender;
qRegisterMetaType<Signal>("Signal");
QObject::connect(&sender, &Sender::signal, &receiver, &Receiver::signal);
sender.start();
app.exec();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment