[DEV] change to build on C++11

This commit is contained in:
Edouard DUPIN 2016-02-22 21:58:56 +01:00
parent e5989608b8
commit 20797c0e97
3 changed files with 51 additions and 40 deletions

View File

@ -163,8 +163,8 @@ namespace esignal {
*/
template<class classType, class Func, class... Arg>
Connection connect(classType* _class, Func _func, Arg... _arg) {
std::unique_ptr<Executor> executer(new Executor([=]( auto&&... cargs ){
(*_class.*_func)(cargs..., _arg... );
std::unique_ptr<Executor> executer(new Executor([=](const Args& ... _argBase){
(*_class.*_func)(_argBase..., _arg... );
}));
std::size_t uid = executer->m_uid;
m_executors.push_back(std::move(executer));
@ -184,9 +184,9 @@ namespace esignal {
return;
}
TYPE* directPointer = obj2.get();
std::unique_ptr<ExecutorShared> executer(new ExecutorShared(_class, [=]( auto&&... cargs ){
std::unique_ptr<ExecutorShared> executer(new ExecutorShared(_class, [=]( const Args& ... _argBase){
// TODO : Check if compilator does not use the shared ptr ...
(*directPointer.*_func)(cargs..., _args... );
(*directPointer.*_func)(_argBase..., _args... );
}));
m_executors.push_back(std::move(executer));
}

View File

@ -47,7 +47,7 @@ def create(target, module_name):
'esignal/Connection.h',
'esignal/details/Signal.hxx',
])
my_module.compile_version("c++", 2014)
my_module.compile_version("c++", 2011)
my_module.add_module_depend(['etk'])
my_module.add_path(tools.get_current_path(__file__))
my_module.compile_flags('c++', [

View File

@ -166,25 +166,35 @@ TEST(test_signal_static_func, localFunctionMixedIntString) {
EXPECT_EQ(tmpRetString, "plTGY");
}
template<class Func, class... Arg>
auto complete_args(Func _f, Arg... _arg) {
return [=]( auto&&... cargs ){
return _f( cargs..., _arg... );
};
}
TEST(test_signal_static_func, localFunctionConstIntStringPolyArg) {
clear();
esignal::Signal<int32_t, std::string> signal;
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
esignal::Connection connection1 = signal.connect(complete_args(&callbackPolyargs, 'c', 12365));
EXPECT_EQ(signal.size(), 1);
EXPECT_EQ(signal.empty(), false);
signal.emit(246, "plop567");
EXPECT_EQ(tmpRetInt32, 246 + 12365);
EXPECT_EQ(tmpRetString, "plop567c");
}
#if __CPP_VERSION__ >= 2014
template<class Func, class... Arg>
auto complete_args(Func _f, Arg... _arg) {
return [=]( auto&&... cargs ){
return _f( cargs..., _arg... );
};
}
TEST(test_signal_static_func, localFunctionConstIntStringPolyArg) {
clear();
esignal::Signal<int32_t, std::string> signal;
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
esignal::Connection connection1 = signal.connect(complete_args(&callbackPolyargs, 'c', 12365));
EXPECT_EQ(signal.size(), 1);
EXPECT_EQ(signal.empty(), false);
signal.emit(246, "plop567");
EXPECT_EQ(tmpRetInt32, 246 + 12365);
EXPECT_EQ(tmpRetString, "plop567c");
}
#else
/*
template<class Func, class... ARGS_BASE, class... ARGS_CURR>
std::function<void(const ARGS_BASE&...)> complete_args(Func _f, ARGS_BASE... _arg) {
return [=](const ARGS_BASE&..., ARGS_CURR...){
return _f( cargs..., _arg... );
};
}
*/
#endif
#if 0
TEST(test_signal_static_func, localFunctionConstIntStringPolyArgWithJAJA) {
@ -275,20 +285,21 @@ TEST(test_signal_static_func, connect_disconnect_multiple) {
EXPECT_EQ(signal.empty(), false);
}
static void callbackDisconnect(esignal::Connection* _connection) {
_connection->disconnect();
}
TEST(test_signal_static_func, disconnect_inCallback) {
esignal::Signal<> signal;
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
esignal::Connection connection1;
connection1 = signal.connect(complete_args(&callbackDisconnect, &connection1));
EXPECT_EQ(signal.size(), 1);
EXPECT_EQ(signal.empty(), false);
signal.emit();
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
}
#if __CPP_VERSION__ >= 2014
static void callbackDisconnect(esignal::Connection* _connection) {
_connection->disconnect();
}
TEST(test_signal_static_func, disconnect_inCallback) {
esignal::Signal<> signal;
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
esignal::Connection connection1;
connection1 = signal.connect(complete_args(&callbackDisconnect, &connection1));
EXPECT_EQ(signal.size(), 1);
EXPECT_EQ(signal.empty(), false);
signal.emit();
EXPECT_EQ(signal.size(), 0);
EXPECT_EQ(signal.empty(), true);
}
#endif