jeudi 5 février 2015

Lambdas in C++03


Vote count:

1




So, I am trying to replace the following code (C++11):



struct test {
const char *n;
int i;

std::function<int(void)> read;
std::function<void(int)> write;
};

#define define_test(n, i, bodyRead, bodyWrite) \
{ n, i, []() { bodyRead; }, [](int v) { bodyWrite; } }

std::initializer_list<test> tests = {
define_test("test1", 1, return 1, v = 2),
...
};


with a C++03 compatible code that gives the same effect:



struct test {
test(const char *_n, int _i, boost::function<int(void)> _read, boost::function<void(int)> _write) {
n = _n;
i = _i;
read = _read;
write = _write;
}

const char *n;
int i;

boost::function<int(void)> read;
boost::function<void(int)> write;
};

#define define_test(n, i, bodyRead, bodyWrite) \
( n, i, []() { bodyRead; }, [](int v) { bodyWrite; } )

std::vector<test> tests;
static void init_tests(void) {
tests.push_back(define_test("test1", 1, return 1, v = 2));
}


With no doubt, The Visual C++ studio 2008 Express compiler rejects the lambda expressions, using boost wouldn't help it either, except was bind() and the lambda boost got, which I am not exactly sure how I would do it with this.


To elaborate more on this, I want to also be able to use like so (that means structs and static functions won't be of much help either):



using namespace boost::assign;
static std::vector<test> tests;
static void init_tests(void) {
push_back(tests)
define_test(...)
...;
}


That's because I am writing a ton of this and C++11 was so easy.



asked 2 mins ago

user9000

1,219






Lambdas in C++03

Aucun commentaire:

Enregistrer un commentaire