पैरामीटर के आधार पर निर्माता में एक सदस्य डेटा प्रकार सेट करें

वोट
3

मैं एक पैरामीटर के रूप में एक enum मूल्य के साथ एक वर्ग है। यह एक सदस्य है m_ConsistencyErrorsजो एक है std::set। मैं enum पैरामीटर के मूल्य के आधार पर निर्माण इस सदस्य के प्रकार सेट करना चाहते हैं।

यदि TestType मूल्य है MSG123_CONSISTENCY_TESTमैं चाहूँगा m_ConsistencyErrors प्रकार की होनी चाहिएstd::set<EnMsg123Param>

यदि TestType मूल्य है MSG5_CONSISTENCY_TESTमैं चाहूँगा m_ConsistencyErrors प्रकार की होनी चाहिएstd::set<EnMsg5Param>

वहाँ इस लक्ष्य को हासिल करने के लिए या मैं एक और समाधान खोजना चाहिए एक साफ रास्ता नहीं है।

class CMsgConsistencyTest // : public CTestBase  // left out for simplicity
{
    enum EnTests
    {
        MSG123_CONSISTENCY_TEST,
        MSG5_CONSISTENCY_TEST,
    };
    enum EnMsg123Param
    {
        Msg123_1,
        Msg123_2
    };
    enum EnMsg5Param
    {
        Msg5_1,
        Msg5_2
    };

public:
    CMsgConsistencyTest(const EnTests TestType) //  : CTestBase(TestType)  // left out for simplicity
    {
        if (TestType == MSG123_CONSISTENCY_TEST)
        {
            ParameterType = EnMsg123Param;  // pseudo code
        }
        else if (TestType == MSG5_CONSISTENCY_TEST)
        {
            ParameterType = EnMsg5Param;  // pseudo code
        }
    }

private:
    template<typename ParameterType>
    std::set<ParameterType> m_ConsistencyErrors;
};
14/02/2019 को 14:53
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

आपको लगता है कि, ऐसा नहीं कर सकते ParameterType पता किया जाना चाहिए हर समय है जब आप का उपयोग CMsgConsistencyTest और उसके सदस्यों के लिए पहुँच जबm_ConsistencyErrors

उसके लिए CMsgConsistencyTest एक टेम्पलेट वर्ग, उदाहरण हो सकता है

#include <set>

enum EnMsg123Param
{
  Msg123_1,
  Msg123_2,
};

enum EnMsg5Param
{
  Msg5_1,
  Msg5_2,
  Msg5_3,
};

template<typename ParameterType>
class CMsgConsistencyTest // : public CTestBase  // left out for simplicity
{
  public:
    // ...
  private:
    std::set<ParameterType> m_ConsistencyErrors;
};

// and for instance

CMsgConsistencyTest<EnMsg123Param> A;
CMsgConsistencyTest<EnMsg5Param> B;

अन्यथा आप ऐसा ही कुछ बदसूरत और भयावह और 'गैर सी ++' करना पड़ सकता है:

   CMsgConsistencyTest(const EnTests TestType) //  : CTestBase(TestType)  // left out for simplicity
    {
        if (TestType == MSG123_CONSISTENCY_TEST)
        {
            m_ConsistencyErrors = new set<EnMsg123Param>;
        }
        else if (TestType == MSG5_CONSISTENCY_TEST)
        {
            m_ConsistencyErrors = new set<EnMsg5Param>;
        }
        // else ?
        // probably need to save TestType etc
    }

private:
    void * m_ConsistencyErrors;
14/02/2019 को 15:10
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more