There is a better way in C++0x for this
class X: public Super {
using Super::Super;
};
If you declare a perfect-forwarding template, your type will behave badly in overload resolution. Imagine your base class is convertible from int
and there exist two functions to print out classes
class Base {
public:
Base(int n);
};
class Specific: public Base {
public:
template<typename... Args>
Specific(Args&&... args);
};
void printOut(Specific const& b);
void printOut(std::string const& s);
You call it with
printOut("hello");
What will be called? It's ambiguous, because Specific
can convert any argument, including character arrays. It does so without regard of existing base class constructors. Inheriting constructors with using declarations only declare the constructors that are needed to make this work.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…