तो, मैं निम्नलिखित कोड (सी ++ 11) को बदलने के लिए कोशिश कर रहा हूँ:lambdas में सी ++ 03
: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),
...
};
एक सी ++ 03 संगत कोड है कि एक ही प्रभाव देता साथ
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));
}
कोई संदेह नहीं है के साथ
, विजुअल C++ स्टूडियो 2008 एक्सप्रेस SP1 संकलक लैम्ब्डा भाव को खारिज कर दिया, को बढ़ावा देने का उपयोग कर या तो इसे मदद नहीं होता, सिवाय इसके लिए बाध्य किया गया था() और लैम्ब्डा बढ़ावा मिला है, जो मैं वास्तव में यकीन है कि मैं कैसे होगा नहीं कर रहा हूँ इसके साथ करो
इस बारे में अधिक विस्तार से बता दें मैं भी तो की तरह उपयोग करने के लिए सक्षम होना चाहते हैं:
using namespace boost::assign;
static std::vector<test> tests;
static void init_tests(void) {
push_back(tests)
define_test(...)
...;
}
मतलब यह है कि स्थिर कार्यों के साथ structs ज्यादा मदद या तो जैसे की नहीं होगी:
#define define_test(n, i, bodyRead, bodyWrite) \
struct {
static void fn##n(void) { bodyRead; } \
static void fnw##n(int v) { bodyWrite; } \
}; \
(n, i, boost::bind(&fn##n), boost::bind(&fnw##n, boost::placeholders::_1))
ऐसा इसलिए है क्योंकि मैं इसका एक टन लिख रहा हूं और सी ++ 11 इतना आसान था।
मुझे डर है, आप सुविधा कोड के रखरखाव के परेशान करने के लिए देख रहे हैं। (एक मैक्रो पैरामीटर के रूप में एक गैर तुच्छ कार्य को पास करना) –
@ डाइटर लुकिंग वेल, मैंने इस पूरी चीज को फिर से डिजाइन करना समाप्त कर दिया :(प्यार सी ++ –