    #include <iostream>
    #include <string>
    #include <vector>
    #include <list>
    #include <boost/algorithm/string/classification.hpp> // Include boost::for is_any_of
    #include <boost/algorithm/string/split.hpp>          // Include for boost::split
    
    using namespace std;
    
    class CharStarWrapper
    {
    	private:
    		typedef std::vector<char> CharArray;
    		typedef std::list<CharArray> StringList;
    		typedef std::vector<const char *> ArgList;
    
    		const char** m_Args;
    		StringList m_sList;
    		ArgList m_cStrings;
    		
        public:
    		CharStarWrapper(const std::string & input) : m_Args(nullptr)
    		{
    			std::vector<std::string> args;
    			boost::split(args, input, boost::is_any_of(" "), boost::token_compress_on);
    			for (auto const &v : args)
    			{
    				// create an array of char and place on list
    				m_sList.push_back(CharArray(v.begin(), v.end()));
    
    				// null terminate this entry
    				m_sList.back().push_back(0);
    
    				// add the pointer to this entry to the vector of const char *.
    				m_cStrings.push_back(&m_sList.back()[0]);
    			}
    			m_Args = m_cStrings.data();
    		}
    
    		const char** getArgs() { return m_Args;  }
    		int getArgCount() const { return static_cast<int>(m_cStrings.size()); }
    };
    
    // Call this like main() 
    void fake_main(int argc, const char **argv)
    {
       std::cout << "The number of arguments is " << argc << "\n";
   	   for (int i = 0; i < argc; ++i) 
    		std::cout << argv[i] << "\n";
    }

    int main() {
       	string arg = "test ./MyDirectoryName/OPQ_Arksoatn.txt 1 SOMETHING 1 2 3 4 5 6 7";
    	CharStarWrapper wrapper(arg);
        fake_main(wrapper.getArgCount(), wrapper.getArgs());        
    }
