Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 104895
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T01:21:13+00:00 2026-05-11T01:21:13+00:00

I often want to define new ‘Exception’ classes, but need to have an appropriate

  • 0

I often want to define new ‘Exception’ classes, but need to have an appropriate constructor defined because constructors aren’t inherited.

class MyException : public Exception  {  public:   MyException (const UString Msg) : Exception(Msg)   {   }; } 

Typedefs don’t work for this, because they are simply aliases, not new classes. Currently, to avoid repeating this trivial boilerplate, I use a #define which does the donkeywork.

#define TEXCEPTION(T) class T : public Exception \ { \ public:\     T(const UString Msg) : Exception(Msg) {}; \ }  ...  TEXCEPTION(MyException); 

But I keep wondering if there’s a better way of achieving this – maybe with templates, or some new C++0x feature

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T01:21:13+00:00Added an answer on May 11, 2026 at 1:21 am

    If you really want to have new classes derived from Exception, as opposed to having a template parameterized by a parameter, there is no way around writing your own constructor that just delegates the arguments without using a macro. C++0x will have the ability what you need by using something like

    class MyException : public Exception  {  public:     using Exception::Exception; }; 

    You can read about the details of that (seem to have quite a bit of extra rules) in 12.9 ‘Inheriting Constructors’ in the latest draft of C++0x.

    In the meantime, i would recommend a policy based design (made small text, because the OP accepted the above, and not this policy stuff):

    // deriving from Impl first is crucial, so it's built first // before Exception and its Ctor can be used. template<typename Impl> struct ExceptionT : Impl, Exception {     // taking a tuple with the arguments.     ExceptionT(arg_types const& t = arg_types())         :Exception(Impl::Ctor(t)) { }     // taking a string. plain old stuff     ExceptionT(std::string const& s):Exception(Impl::Ctor(s)) { } };  struct ExceptionDefImpl {     typedef boost::tuple<> arg_types;      // user defined ctor args can be done using a tuple     std::string Ctor(arg_types const& s) {         return std::string();     }      std::string const& Ctor(std::string const& s) {         return s;     } };  // will inherit Ctor modifier from DefImpl. struct MemoryLost : ExceptionDefImpl {      typedef boost::tuple<int> arg_types;      std::string Ctor(arg_types const& s) {         std::ostringstream os;         os << 'Only ' << get<0>(s) << ' bytes left!';         return os.str();     }      int getLeftBytes() const { return leftBytes; } private:     int leftBytes; };  struct StackOverflow : ExceptionDefImpl { };  // alias for the common exceptions typedef ExceptionT<MemoryLost> MemoryLostError; typedef ExceptionT<StackOverflow> StackOverflowError;  void throws_mem() {     throw MemoryLostError(boost::make_tuple(5)); }      void throws_stack() { throw StackOverflowError(); }  int main() {     try { throws_mem(); }      catch(MemoryListError &m) { std::cout << 'Left: ' << m.getLeftBytes(); }     catch(StackOverflowError &m) { std::cout << 'Stackoverflow happened'; } } 

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I often want to trigger a certain function just once, but I need to
I often want to use @see when writing classes & methods but I usually
I often want to grab the first element of an IEnumerable<T> in .net, and
I often want to make a multiline function call and reduce it down to
Using Vim I often want to replace a block of code with a block
In my SWT Java app I often want to return information from inside a
When foreach ing through a generic list I often want to do something different
Often I want to add a value to a table or update the value
All too often I want a WPF slider that behaves like the System.Windows.Forms.TrackBar of
When using gdb and Vim, often I want to stop on a particular line.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.