2012-09-21 12 views
8

बूस्ट के साथ परीक्षण करते समय मैं अपने main() फ़ंक्शन को कैसे परिभाषित करूं?बूस्ट इकाई परीक्षण मुख्य समारोह?

बूस्ट अपने मुख्य कार्य का उपयोग कर रहा है, लेकिन मैं एक कस्टम मेमोरी मैनेजर का उपयोग कर रहा हूं और किसी भी मेमोरी आवंटित होने से पहले इसे आरंभ करने की आवश्यकता है, अन्यथा मुझे त्रुटियां मिलेंगी।

+0

सी ++ में, 'मुख्य' एक विधि नहीं है। – jalf

उत्तर

11

मुझे विश्वास नहीं है कि आपको वास्तव में अपने मुख्य की आवश्यकता है। मुझे लगता है कि आप global fixture:

struct AllocatorSetup { 
    AllocatorSetup() { /* setup your allocator here */ } 
    ~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ } 
}; 

BOOST_GLOBAL_FIXTURE(AllocatorSetup); 
+0

ओपी के उद्देश्य के लिए, यह सबसे उपयुक्त लगता है। –

-1

मेमोरी main से पहले आवंटित किया जा सकता है:

static int* x = new int(1); 
int main() { return *x; } 

और आप अपने स्मृति प्रबंधक एक वैश्विक चर के रूप में अच्छी तरह से कर सकता है,
लेकिन आप वैश्विक चर प्रारंभ की एक विशेष क्रम लागू नहीं कर सकते। (कम से कम मानक सी ++ में)

विंडोज़ में आप अपने मेमोरी मैनेजर को डीएलएल में डाल सकते हैं, इसे एप्लिकेशन एंट्री पॉइंट कहने से पहले शुरू किया जाएगा, लेकिन फिर भी, कुछ अन्य स्मृति को आवंटित कर सकता है - एक और डीएलएल, या आपके डीएलएल का सीआरटी।

+0

ग्लोबल्स का प्रारंभिक क्रम एक संकलन इकाई के अंदर अच्छी तरह से परिभाषित किया गया है - इसलिए आप जो भी ऑर्डर चाहते हैं उसे लागू कर सकते हैं। बस उन्हें एक सीयू में रखें :) – Fiktik

0

आप एक स्थिर वस्तु को परिभाषित कर सकते और उनके निर्माता मुख्य पहले निष्पादित करेंगे:

class Alloc_Setup { 
    Alloc_Setup() { 
     // Your init code 
    } 
    ~Alloc_Setup() { 
     // Your cleanup 
    } 
}; 
Alloc_Setup setup; 
int main() {} // (generated by boost) 
+0

यह एक समाधान से अधिक हैक है, और यह आपको अपने मुख्य कार्य को परिभाषित करने की अनुमति नहीं देता है। कोई समस्या मुश्किल नहीं है, मुझे जवाब मिला। – ProgrammerAtWork

संबंधित मुद्दे